Delphiでスレッドセーフリストラッパーを実装するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/302583

質問

2つのTstringlistとTClassListを保持するリストラッパーがあります

次のようなスレッドセーフにする必要があります。

  • 同時書き込みは許可されていません(何らかの待機状態に入る必要があります)
  • 書き込み中の読み取り(またはその逆)は許可されません(何らかの待機状態に入る必要があります)
  • 同時読み取りが許可されている

これを行う方法に関するアイデアはありますか?私の本能は、セマフォまたは「使用カウンタ」などのクリティカルセクションだけでなく、CSとの conjunction のようなものが必要だと言っています。

どこから始めればいいかわかりません-英語での全体的なアプローチから、擬似コード、デルファイの実装、または外部リンクまで、何でも大歓迎です。

役に立ちましたか?

解決

sysutils.pasで宣言されているTMultiReadExclusiveWriteSynchronizerクラスをご覧ください...

他のヒント

このチュートリアルをご覧ください。 Delphiの方法でスレッド化する

第11章をご覧ください、しかしそれはすべて良いものです。

本当にTThreadListを見る必要があります。

.Add、.Remove、.Clearメソッドは、リストを自動的にロックします。必要に応じて、必要に応じてロック/ロック解除することもできます。

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

TMultiReadExclusiveWriteSynchronizerは素晴らしいアイデアですが、すべてのバグを解決したかどうかはわかりません。常に負荷がかかっている問題がありました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top