PTHREAD_BARRIER(3) | FreeBSD Library Functions Manual | PTHREAD_BARRIER(3) |
名称
pthread_barrier_destroy, pthread_barrier_init, pthread_barrier_wait — バリアオブジェクトを破壊するか、初期化するか、またはウェート (待ちます) しますライブラリ
POSIX Threads Library (libpthread, -lpthread)書式
#include < pthread.h> int
pthread_barrier_destroy( pthread_barrier_t *barrier);
int
pthread_barrier_init( pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned count);
int
pthread_barrier_wait( pthread_barrier_t *barrier);
解説
pthread_barrier_init() 関数は、 attr で指定された属性で barrier を初期化します。それ (attr) が NULL であるなら、デファルト属性で初期化します。任意のウェートしている (待っている) スレッドが解放される前に pthread_barrier_wait() を呼び出さなければならないスレッドの数は、 count で指定されます。 pthread_barrier_destroy() 関数は、 barrier を破壊して、それ代わって割り付けられたどんなリソースも解放します。pthread_barrier_wait() 関数は、 barrier でスレッドの呼び出しを同期します。スレッドは、十分な数のスレッドがこの関数を呼び出すまでさらなる進行を行うことからブロックされます。それらのどれかが解放される前にそれを呼び出さなければならないスレッドの数は、 pthread_barrier_init() への count 引数で決定されます。スレッドがいったん解放されると、バリアは、リセットされます。
実装に関する注
N:M Threading Library (libkse, -lkse) と 1:1 Threading Library (libthr, -lthr) の両方では、 PTHREAD_BARRIER_SERIAL_THREAD は、バリアに達する最後のスレッドによって常に返されます。戻り値
成功すれば、 pthread_barrier_destroy() と pthread_barrier_init() の両方は、0 を返します。そうでなければ、エラー番号がエラーを示すために返されます。 pthread_barrier_wait() への呼び出しが成功すれば、スレッドの 1 つだけを除いてすべてが 0 を返します。その 1 つのスレッドは、 PTHREAD_BARRIER_SERIAL_THREAD を返します。そうでなければ、エラー番号がエラーを示すために返されます。これらの関数のいずれも EINTR を返しません。
エラー
pthread_barrier_destroy() 関数は、次の場合に失敗します:- [ EBUSY]
- それが使用中であった間に、 barrier を破壊する試みが行われました。
pthread_barrier_destroy() と pthread_barrier_wait() 関数は、次の場合に失敗します:
- [ EINVAL]
- barrier によって指定された値が、無効です。
pthread_barrier_init() 関数は、次の場合に失敗します:
- [ EAGAIN]
- システムは、 barrier を初期化するためのメモリ以外のリソースが不足しています。
- [ EINVAL]
- count 引数が、1 未満です。
- [ ENOMEM]
- barrier を初期化するためのメモリが不足です。
歴史
pthread_barrier_destroy(), pthread_barrier_init() と pthread_barrier_wait() 関数は、 FreeBSD 5.2 の N:M Threading Library (libkse, -lkse) と FreeBSD 5.3 の 1:1 Threading Library (libthr, -lthr) ではじめて登場しました。February 19, 2004 | FreeBSD |