1

リーダーとライターが 1 つしかない場合、FIFO キューを同期する必要がありますか?

4

5 に答える 5

4

「同期」とはどういう意味ですか? リーダーとライターが別々のスレッドにある場合、次のような詳細を含めて、FIFO が同時実行を「正しく」処理する必要があります。

  • FIFO API の適切な使用により、データ構造が破損することは決してありません
  • FIFO API を適切に使用しても、デッドロックが発生することはありません (ただし、読み取るものがあるまでリーダーが待機するメカニズムが必要です)。
  • FIFO から読み込まれたオブジェクトは、同じオブジェクトで、同じ順序で、FIFO に書き込まれている必要があります (欠落しているオブジェクトや順序の変更があってはなりません)。
  • ライターが FIFO に何かを入れてから、リーダーがそれを利用できるようになるまでの時間には制限があるはずです (希望があります!)。

Java の世界では、これに関する優れた本Java Concurrency In Practiceがあります。同時実行性を正しく処理する FIFO を実装するには、複数の方法があります。最も単純な実装はブロッキングであり、より複雑なものは、最近のほとんどのプロセッサで見られる比較とスワップ命令に基づく非ブロッキング アルゴリズムを使用します。

于 2009-01-12T23:40:20.127 に答える
2

はい (リーダーとライターが異なるスレッドから FIFO キューと対話する場合)。

于 2009-01-12T22:02:15.987 に答える
0

実装によって異なりますが、最も可能性が高いです。部分的に書き込まれたデータをリーダーに読み取らせたくない場合。

于 2009-01-12T22:05:25.027 に答える
0

はい、ドキュメントに明示的に別段の記載がない限り。

(InterlockedXXX 関数を使用する Windows など、1 つのリーダー スレッドと 1 つのライター スレッドしかない場合、同期を必要としない特殊な FIFO を実装することは可能です。)

于 2009-01-12T22:09:07.453 に答える