我有一个列表包装器,它维护两个 Tstringlists 和一个 TClassList

我需要它是线程安全的,这样:

  • 不允许并发写入(应进入某种等待状态)
  • 不允许边写边读(反之亦然)(应该进入某种等待状态)
  • 并发读取 允许

关于我如何做到这一点有什么想法吗?我的直觉告诉我,它需要的不仅仅是一个关键部分,也许是一个信号量或“使用计数器”,也许是其中之一 连词 与CS。

我只是不太确定从哪里开始 - 从英语的总体方法到伪代码,再到 delphi 实现或外部链接,我将不胜感激。

有帮助吗?

解决方案

您应该查看 sysutils.pas 中声明的 TMultiReadExclusiveWriteSynchronizer 类...

其他提示

看看这个教程。Delphi 方式的线程化

看看第11章,但都是好东西。

你确实应该看看 TThreadList。

.Add、.Remove、.Clear 方法会自动为您锁定列表。如果需要,您还可以根据需要锁定/解锁:

x.LockList; 
try 
  //do whatever
finally  
  x.Unlocklist; 
end;

TMultiReadExclusiveWriteSynchronizer 是一个伟大的想法,但我不知道他们是否解决了所有错误。它总是在负载下出现问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top