7

これが私の問題の簡略版です。

無限ループで次の3つの命令を実行するN個のスレッドがあります。

A -> B -> C -> A -> B -> C -> A -> B -> .......

すべてのスレッドが命令Bを同時に実行するようにしたい、つまり、すべてのスレッドがBに到達した場合にのみ、任意のスレッドによるBの実行を開始する必要があります。したがって、B-> C-> Aを実行したスレッドがある場合は、他のスレッドまでここで待機する必要があります。スレッドもBを実行する準備ができています。

可能であれば、WindowsとMACの両方で動作するポータブルソリューションを教えてください。

4

2 に答える 2

4

Boost スレッド ライブラリ、特に条件変数に関するセクションを確認してください。

于 2011-11-14T13:14:52.887 に答える
0

N-1 セマフォとミューテックスの配列? すべてのスレッドは、カウンタを含むミューテックスを取得し、N 未満の場合はミューテックスを解放し、[counter] でセマフォ配列を待機します。N 番目のスレッドは、カウンターが N であることを検出し、すべてのセマフォにシグナルを送り、カウンターを 0 にリセットし、'B' を実行してミューテックスを解放し、終了します。解放されると、他のスレッドも B を実行しますが、N 番目のスレッドが「B」を実行してミューテックスを解放するまで、ループして再び入ることはできません。

すべてのマルチタスク OS には、セマフォ/ミューテックスがあります。可能であれば、セマフォの代わりにイベントを使用できます。

于 2011-11-14T13:21:28.587 に答える