我有一个列表包装器,它维护两个Tstringlists和一个TClassList
我需要这个是线程安全的,这样:
关于我如何做到这一点的任何想法?我的直觉告诉我它需要的不仅仅是一个关键部分,可能是信号量或“使用计数器”,也许是连接中的一个与CS。
我只是不太清楚从哪里开始 - 从英语到伪代码的整体方法,到delphi实现或外部链接的任何事情都会非常感激。
答案 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是一个伟大的想法,但我不知道他们是否曾经解决过所有的错误。它一直存在负载问题。