代码之家  ›  专栏  ›  技术社区  ›  Graza

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

  •  6
  • Graza  · 技术社区  · 17 年前

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

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

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

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

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

    3 回复  |  直到 14 年前
        1
  •  12
  •   Uwe Raabe    17 年前

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

        2
  •  5
  •   Steve    17 年前

    看看这个教程。 Threading the Delphi Way

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

        3
  •  2
  •   Darian Miller    17 年前

    你真的应该看看TThreadList。

    方法。添加。拆下。Clear会自动为您锁定列表。如果需要,您还可以根据需要锁定/解锁:

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

    TMultiReadExclusiveWriteSynchronizer是一个好主意,但我不知道他们是否解决了所有的错误。它在负载下总是有问题。