マルチスレッドのプログラミング

バリアーで同期をとるためのスレッドの待機

指定したバリアーでスレッドの同期をとるには、pthread_barrier_wait(3C) を使用します。呼び出しスレッドは、必要な数のスレッドがこのバリアーを指定して pthread_barrier_wait() を呼び出すまでブロックされます。スレッドの数は、pthread_barrier_init() 関数で指定されます。

必要な数のスレッドがこのバリアーを指定して pthread_barrier_wait() を呼び出すと、1 つの不定のスレッドに定数 PTHREAD_BARRIER_SERIAL_THREAD が返され、残りの各スレッドには 0 が返されます。バリアーは次に、このバリアーを参照していた最新の pthread_barrier_init() 関数の結果として保持していた状態にリセットされます。

pthread_barrier_wait() の構文

int pthread_barrier_wait(pthread_barrier_t  *barrier);
#include <pthread.h> 
pthread_barrier_t barrier; 
int ret; 
ret = pthread_barrier_wait(&barrier);

pthread_barrier_wait() の戻り値

pthread_barrier_wait() 関数は、正常終了時に PTHREAD_BARRIER_SERIAL_THREAD を返します。この値は pthread.h で定義されており、このバリアーで同期がとられた 1 つの任意のスレッドに返されます。ほかの各スレッドには、0 が返されます。それ以外の場合は、エラーコードが返されます。


EINVAL

説明:

barrier で指定された値が、初期化されたバリアーオブジェクトを表していません。