2008-11-19 74 views
6

我有一个列表的包装,维护两个Tstringlists和TClassList如何在Delphi中实现线程安全列表包装?

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

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

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

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

回答

12

你应该看看在sysutils.pas宣布TMultiReadExclusiveWriteSynchronizer类...

+1

可能是RTL中最长的类名:) – Serguzest 2008-11-19 17:08:11

+0

他们可以很轻松地称它为TMREWS – Steve 2008-11-19 17:40:27

+5

他们可以很容易地将它称为TGreenIdea并传达了与TMREWS相同的信息。不要害怕漫长的标识符名称。 – 2008-11-19 21:07:39

2

你真的应该看看TThreadList。

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

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

TMultiReadExclusiveWriteSynchronizer是一个大的想法,但我不知道他们是否曾经烫所有的虫子。它一直在加载问题。