指定したバリアーでスレッドの同期をとるには、pthread_barrier_wait(3C) を使用します。呼び出しスレッドは、必要な数のスレッドがこのバリアーを指定して pthread_barrier_wait() を呼び出すまでブロックされます。スレッドの数は、pthread_barrier_init() 関数で指定されます。
必要な数のスレッドがこのバリアーを指定して pthread_barrier_wait() を呼び出すと、1 つの不定のスレッドに定数 PTHREAD_BARRIER_SERIAL_THREAD が返され、残りの各スレッドには 0 が返されます。バリアーは次に、このバリアーを参照していた最新の pthread_barrier_init() 関数の結果として保持していた状態にリセットされます。
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_SERIAL_THREAD を返します。この値は pthread.h で定義されており、このバリアーで同期がとられた 1 つの任意のスレッドに返されます。ほかの各スレッドには、0 が返されます。それ以外の場合は、エラーコードが返されます。
EINVAL
説明:barrier で指定された値が、初期化されたバリアーオブジェクトを表していません。