1

共有キュー A に書き込む 2 つの 40 スレッドと、共有キュー A から読み取る 1 つのスレッドがあります。

を使用してスレッドを同期しました

EnterCriticalSection(&cs);

//何かをする

LeaveCriticalSection(&cs);

ここで、別の共有キュー B があり、40 個のスレッドが共有キュー B に書き込み、別の分離されたスレッドがこの共有キュー B から読み取ります。この共有キュー B を共有し、スレッド間で同期するには、次のものが必要ですか?別のクリティカル セクションでは、csB としましょう。または、単一のクリティカル セクション cs だけが目的を果たすことができますか?

4

1 に答える 1

1

個別のクリティカル セクションを使用する必要はありません、個別のクリティカル セクションを使用すると、より多くの並列処理が可能になります。異なるキューからの読み取りとキューへの書き込みが高度に同期されている場合、キュー B のすべてのアクションを、キュー A に使用されるのと同じクリティカル セクションに入れることができる場合があります。この場合、クリティカル セクションを再利用できます。ただし、このような再利用はデッドロック状態になる可能性があることに注意してください。

「クリティカル セクション」は、実際にはスレッド内のコードの範囲であることに注意してください。異なるクリティカル セクションが共有できるのは、これらのコード範囲に対するガード (通常はセマフォ) です。したがって、一部のキューを操作するすべてのコード範囲は同じガードによって保護され、キューの更新が互いに干渉しないようにします。これは、キューの破損につながる可能性があるためです。

于 2013-07-04T07:01:34.710 に答える