gpt4 book ai didi

multithreading - 类实例 "owning"TMultiReadExclusiveWriteSynchronizer 实例?

转载 作者:行者123 更新时间:2023-12-03 15:43:54 29 4
gpt4 key购买 nike

我有一个多线程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 私有(private)字段的访问。
线程 A 可以使用公共(public)属性修改线程 B 中的字段,因此需要同步器,但每个线程中应该有一个单独的同步器,以便线程在修改自己的字段时不必互相等待属性。

Delphi 帮助说“创建 TMultiReadExclusiveWriteSynchronizer 的全局实例”,但它是否必须始终是全局的?
如果类仅保护对其自身属性的访问,同步是否可以与私有(private)字段中的 TMultiReadExclusiveWriteSynchronizer 实例一起使用?

最佳答案

The help说的是:

Create a global instance of TMultiReadExclusiveWriteSynchronizer that is associated with the global memory you want to protect.

但是你没有全局内存。您拥有线程对象特定的内存,因此为每个线程对象创建同步对象。您可以根据需要创建任意多个。为您希望单独访问和保护的每个共享元素创建一个。

关于multithreading - 类实例 "owning"TMultiReadExclusiveWriteSynchronizer 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925362/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com