【发布时间】:2013-05-18 08:17:54
【问题描述】:
我对delphi XE2比较陌生,如果我喜欢这个代码,我想知道一些事情
TSomeClass=class
strict private
class var
FCounter:integer;
public
class procedure SomeProcedure();static
end;
implementation
class procedure SomeProcedure()
begin
inc(FCounter);
end;
initialization
begin
FCounter:=0;
end;
finalization
begin
FCounter:=0;
end;
据我了解,SomeProcedure() 将在内存和单个实例上保持静态,
我的问题
- 如果 TSomeClass 被多个线程访问,TSomeClass 是否线程安全?或者它会使线程之间重叠?
- 如果是,每个线程都需要临界区吗?或这种方法的另一种方法...
- 如果两个不同的线程访问这个方法,FCounter 呢? FCounter 会从最后一个值开始连续计数,还是从零开始计数不同值的不同线程?
【问题讨论】:
-
使用 TSomeClass.SomeProcedure 调用您可以将其视为一个简单的过程,它可能是线程保存的,也可能不是线程保存的,取决于实现。如果 SomeClassInstance 的分配发生变化,使用 SomeClassInstance.SomeProcedure 可能会崩溃。
-
是的,正如 bummi 所暗示的,如果在多线程场景中更新状态,您将需要使用临界区或其他一些同步原语来防止数据损坏。
-
是的,如果该方法实现访问另一个类上的另一个数据,它不是线程安全的,我更新我的问题以明确我的观点,仅访问同一类中的类 var 的类静态方法怎么样?
标签: multithreading delphi class methods static