我是一名有用的助手,可以为您翻译文本。
我有一个多线程的Delphi程序,创建多个某些类的实例,我希望每个类实例都有自己的TMultiReadExclusiveWriteSynchronizer实例,以便在特定属性的get和set方法中使用。
例如,这是一个使用TMultiReadExclusiveWriteSynchronizer的类的部分单元:
这样做的问题在于,该单元创建了一个TMultiReadExclusiveWriteSynchronizer实例,然后由多个TSGThread实例使用。
同步器仅控制TSGThread的私有字段访问。
线程A可以使用公共属性来修改线程B中的字段,因此需要同步器,但每个线程中应该有一个单独的同步器,以便这些线程不必等待对方,如果它们正在修改自己的属性。
Delphi帮助说“创建TMultiReadExclusiveWriteSynchronizer的全局实例”,但严格来说,它必须始终是全局的吗?
如果类仅保护其自己的属性访问,那么使用位于私有字段中的TMultiReadExclusiveWriteSynchronizer实例是否会起到同步作用?
我有一个多线程的Delphi程序,创建多个某些类的实例,我希望每个类实例都有自己的TMultiReadExclusiveWriteSynchronizer实例,以便在特定属性的get和set方法中使用。
例如,这是一个使用TMultiReadExclusiveWriteSynchronizer的类的部分单元:
interface
TSGThread=class(TThread)
private
fWaiting:boolean;
function getWaiting:boolean;
procedure setWaiting(value:boolean);
public
property waiting:boolean read getWaiting write setWaiting;
end;
implementation
var syncWaiting:TMultiReadExclusiveWriteSynchronizer;
function TSGThread.getWaiting:boolean;
begin
syncWaiting.BeginRead;
result:=fWaiting;
syncWaiting.EndRead;
end;
procedure TSGThread.setWaiting(value:boolean);
begin
syncWaiting.BeginWrite;
fWaiting:=value;
syncWaiting.EndWrite;
end;
initialization
syncWaiting:=TMultiReadExclusiveWriteSynchronizer.Create;
finalization
syncWaiting.Free;
end.
这样做的问题在于,该单元创建了一个TMultiReadExclusiveWriteSynchronizer实例,然后由多个TSGThread实例使用。
同步器仅控制TSGThread的私有字段访问。
线程A可以使用公共属性来修改线程B中的字段,因此需要同步器,但每个线程中应该有一个单独的同步器,以便这些线程不必等待对方,如果它们正在修改自己的属性。
Delphi帮助说“创建TMultiReadExclusiveWriteSynchronizer的全局实例”,但严格来说,它必须始终是全局的吗?
如果类仅保护其自己的属性访问,那么使用位于私有字段中的TMultiReadExclusiveWriteSynchronizer实例是否会起到同步作用?