如何在Delphi中实现线程安全的列表包装?

时间:2008-11-19 16:54:13

标签: multithreading delphi semaphore critical-section

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

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

  • 不允许并发写入(应输入某种等待状态)
  • 不允许在写作时阅读(反之亦然)(应输入某种等待状态)
  • 并发读取 允许

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

我只是不太清楚从哪里开始 - 从英语到伪代码的整体方法,到delphi实现或外部链接的任何事情都会非常感激。

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:5)

看一下本教程。 Threading the Delphi Way

看看第11章,但这都是好事。

答案 2 :(得分:2)

你真的应该看看TThreadList。

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

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

TMultiReadExclusiveWriteSynchronizer是一个伟大的想法,但我不知道他们是否曾经解决过所有的错误。它一直存在负载问题。