我有一个列表包装器,它维护两个 Tstringlists 和一个 TClassList
我需要这是线程安全的,例如:
- 不允许并发写入(应进入某种等待状态)
- 不允许边读边写(反之亦然)(应进入某种等待状态)
- 允许并发读取
关于如何做到这一点的任何想法?我的直觉告诉我它需要的不仅仅是一个关键部分,也许是一个信号量或“使用计数器”,也许其中之一与 CS结合使用。
我只是不太确定从哪里开始-从英语的整体方法到伪代码,再到 delphi 实现或外部链接,将不胜感激。
我有一个列表包装器,它维护两个 Tstringlists 和一个 TClassList
我需要这是线程安全的,例如:
关于如何做到这一点的任何想法?我的直觉告诉我它需要的不仅仅是一个关键部分,也许是一个信号量或“使用计数器”,也许其中之一与 CS结合使用。
我只是不太确定从哪里开始-从英语的整体方法到伪代码,再到 delphi 实现或外部链接,将不胜感激。
你应该看看在 sysutils.pas 中声明的 TMultiReadExclusiveWriteSynchronizer 类...
看看这个教程。 线程化德尔福方式
看第 11 章,但都是好东西。
你真的应该看看 TThreadList。
.Add、.Remove、.Clear 方法会自动为您锁定列表。如果需要,您还可以根据需要锁定/解锁:
x.LockList;
try
//do whatever
finally
x.Unlocklist;
end;
TMultiReadExclusiveWriteSynchronizer 是一个伟大的想法,但我不知道他们是否已经解决了所有的错误。它总是在负载下出现问题。