6

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

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

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

どうすればこれを行うことができるかについてのアイデアはありますか? 私の直感では、クリティカル セクション以上のもの、おそらくセマフォまたは「使用カウンター」、おそらくこれらの 1 つとCSが必要であることがわかります。

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

4

3 に答える 3

12

sysutils.pas で宣言されている TMultiReadExclusiveWriteSynchronizer クラスを確認する必要があります...

于 2008-11-19T17:01:46.607 に答える
5

このチュートリアルを見てください。 Delphi 方式のスレッド化

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

于 2008-11-19T17:04:19.347 に答える
2

あなたは本当に TThreadList を見るべきです。

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

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

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

于 2008-12-01T03:01:22.403 に答える