2008-11-19 50 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是一個大的想法,但我不知道他們是否曾經燙所有的蟲子。它一直在加載問題。