Delphiでスレッドセーフリストラッパーを実装するにはどうすればよいですか?
-
08-07-2019 - |
質問
2つのTstringlistとTClassListを保持するリストラッパーがあります
次のようなスレッドセーフにする必要があります。
- 同時書き込みは許可されていません(何らかの待機状態に入る必要があります)
- 書き込み中の読み取り(またはその逆)は許可されません(何らかの待機状態に入る必要があります)
- 同時読み取りが許可されている
これを行う方法に関するアイデアはありますか?私の本能は、セマフォまたは「使用カウンタ」などのクリティカルセクションだけでなく、CSとの conjunction のようなものが必要だと言っています。
どこから始めればいいかわかりません-英語での全体的なアプローチから、擬似コード、デルファイの実装、または外部リンクまで、何でも大歓迎です。
解決
sysutils.pasで宣言されているTMultiReadExclusiveWriteSynchronizerクラスをご覧ください...
他のヒント
このチュートリアルをご覧ください。 Delphiの方法でスレッド化する
第11章をご覧ください、しかしそれはすべて良いものです。
本当にTThreadListを見る必要があります。
.Add、.Remove、.Clearメソッドは、リストを自動的にロックします。必要に応じて、必要に応じてロック/ロック解除することもできます。
x.LockList;
try
//do whatever
finally
x.Unlocklist;
end;
TMultiReadExclusiveWriteSynchronizerは素晴らしいアイデアですが、すべてのバグを解決したかどうかはわかりません。常に負荷がかかっている問題がありました。
所属していません StackOverflow