1

バリア ポイントでスレッドを停止したいのですが、バリアが必要な場合にのみ停止したいと考えています。たとえば、特定のタイマー間隔の後、すべてのスレッドがバリアを形成するようにします。潜在的なバリアポイントを配置する方法はありますか? たとえば、各関数の開始時。私はこのようなものが欲しいです。

void some_function()
{
 potentially_barrier_wait;
 ......
}

したがってpotentially_barrier_wait、必要な場合にのみバリアを呼び出し、それ以外の場合potentially_barrier_waitは何もしません。これは満足に実装できますか?これは、すでにバリアを持っているプログラムでも機能するのでしょうか、それとも競合するのでしょうか。

4

1 に答える 1

1

バリアの意味によって異なります...単純な同期について言及している場合は、次のようにできます。

Windows では、イベント CreateEvent( 0, false, 0, 0 ) を作成します。スレッドで、その上で WaitForSingleObject を実行します。「制御」スレッドで SetEvent を実行して、バリアを通過させます。あなたはそれを使ってプリセットやオートリリースなどをすることができます。

Linux でも同様ですが、pthread_cond_timedwait をバリアとして使用し、pthread_cond_signal で通知することができます。

于 2012-09-13T20:04:52.657 に答える