私は C++ (Windows 上) とスレッド化が初めてで、現在、ミューテックス、セマフォ、およびイベントを使用して問題の解決策を見つけようとしています。コンストラクターと Enter というメソッドを使用して Barrier クラスを作成しようとしています。唯一のメソッド Enter を持つクラス Barrier は、多くのスレッドがそのメソッドに到達するまで、それに入るスレッドを保留することになっています。コンストラクターで受信されるのを待機するスレッドの数。私の問題は、ロックを使用してその効果を作成する方法です。私が必要としているのは、カウントに達するまでスレッドを保持する逆セマフォのようなものであり、カウントに達するまでスレッドを許可する通常のセマフォの動作とは異なります。これをどのように行うかについてのアイデアは素晴らしいでしょう。ありがとう、ネタネル。
1033 次
3 に答える
1
多分:
ctor に制限カウントを格納し、空のセマフォを作成します。
スレッドが Enter を呼び出すときは、最初にミューテックスをロックして、内部を安全に操作できるようにします。制限カウントに向かってスレッド数をインクリメントします。制限に達していない場合は、mutex を解放してセマフォを待機します。制限に達した場合、ループ内で semaphore[limit-1] 回シグナルを送信し、スレッド カウントをゼロにし (次回に備えて)、mutex を解放し、Enter() から戻ります。セマフォで待機していて、現在準備完了/実行中のスレッドは、'Enter' 呼び出しから戻るだけです。
ミューテックスは、「Enter」を呼び出して待機していたすべてのスレッドが実行に設定され、バリアがリセットされるまで、ループする解放されたスレッドが「再び入る」ことを防ぎます。
于 2013-08-14T18:11:01.847 に答える