4

スレッドを同期するために pthread_barrier_wait を使用していますが、私のプログラムでは、他のスレッドが pthread_barrier_wait に到達するのを待っている間に、1 つ以上のスレッドが期限切れになる可能性があります。pthread_barrier_wait でスタックしているスレッドが、すべてのスレッドがバリアに達している間に一部のスレッドが期限切れになったことを知る方法はありますか?

4

1 に答える 1

4

それは、有効期限が切れる方法と理由に大きく依存します。

バリアは pthread_barrier_wait() が呼び出される場所を気にしないので、プログラムされた有効期限である場合は、その時点で wait を呼び出すだけです。バリア カウンターはデクリメントされ、スレッドが解放されると、通常のエラー チェックを実行してから、すぐに pthread_exit などを呼び出すことができます。pthread_wait を別の関数に入れると、物事が簡素化される場合があります。

if (must_die)
{
    do_barrier_wait();
    pthread_exit(NULL);
}   

スレッドが殺されたりキャンセルされたりしてスレッドの有効期限が切れる場合、状況はより複雑になり、おそらく途方もないハックの領域に向かっているので、設計を再検討する価値があるかもしれません。

于 2011-06-04T22:02:06.387 に答える