PTHREAD_SPIN_INIT(3) | FreeBSD Library Functions Manual | PTHREAD_SPIN_INIT(3) |
名称
pthread_spin_init, pthread_spin_destroy — スピンロックを初期化するかまたは破壊するライブラリ
POSIX Threads Library (libpthread, -lpthread)書式
#include < pthread.h> int
pthread_spin_init( pthread_spinlock_t *lock, int pshared);
int
pthread_spin_destroy( pthread_spinlock_t *lock);
解説
pthread_spin_init() 関数は、アンロックされた状態に lock 初期化して、それを使用し始めるために必要ないくつかのリソースを割り付けます。 pshared が PTHREAD_PROCESS_SHARED に設定されるなら、spinlock が作成されたプロセスに属していてもいなくても、 lock が存在するメモリ領域をアクセスする任意のスレッドは、 lock を使用することができます。それが、 PTHREAD_PROCESS_PRIVATE, に設定されるなら、同じプロセス内のスレッドによってのみ使用することができます。pthread_spin_destroy() 関数は、 lock 破壊して、そのために割り付けられたいくつかのリソースを開放します。
戻り値
成功すれば、 pthread_spin_init() と pthread_spin_destroy() 関数の両方とも 0 を返します。そうでなければ、エラーを示すエラー番号が返されます。これらの関数のいずれも EINTR を返しません。
エラー
pthread_spin_init() と pthread_spin_destroy() 関数は、次の場合に失敗します:- [ EBUSY]
- それが使用中である間に、 lock を初期化するか、または破壊する試みです。
- [ EINVAL]
- lock によって指定された値が、無効です。
pthread_spin_init() 関数は、次の場合に失敗します:
- [ EAGAIN]
- lock を初期化するために、メモリ以外のリソースが不十分です。
- [ ENOMEM]
- lock を初期化するためのメモリが不十分です。
歴史
pthread_spin_init() と pthread_spin_destroy() 関数は、 FreeBSD 5.2 の N:M Threading Library (libkse, -lkse) と FreeBSD 5.3 の 1:1 Threading Library (libthr, -lthr) ではじめて登場しました。バグ
pthread_spin_init() の実装は、 IEEE Std 1003.2 (“POSIX.2”) に完全に適合していません、なぜなら pshared 引数は、 1:1 Threading Library (libthr, -lthr) と N:M Threading Library (libkse, -lkse) で無視され、 PTHREAD_PROCESSES_PRIVATE でない何か他の値であるなら、 EINVAL を返すからです。January 22, 2004 | FreeBSD |