1

すべて同じ関数を実行するboost::threadsがいくつかあります。

void foo(){
    //Lock Mutex
    //Do some stuffs, part 1
    //Unlock Mutex
    //Do some stuffs, part 2
    //Lock Mutex
    //Do some stuffs, part 3
    //Unlock Mutex
}

アプリケーションが機能するためには、パート2を並行して実行する前に、すべてのスレッドがパート1の実行を終了している必要があります。それを可能にするメカニズムを見つけることができませんでした...なにか?

ありがとうございました。

4

1 に答える 1

2

ブーストバリアを使用します。公式ドキュメントからの定義:

バリアは単純な概念です。ランデブーとも呼ばれ、複数のスレッド間の同期ポイントです。バリアは特定の数のスレッド(n)に対して構成されており、スレッドがバリアに到達すると、n個のスレッドすべてが到着するまで待機する必要があります。n番目のスレッドがバリアに到達すると、待機中のすべてのスレッドが続行でき、バリアがリセットされます。

ここから抽出。

于 2012-08-02T07:53:03.273 に答える