PTHREAD_SPIN_LOCK(3) | FreeBSD Library Functions Manual | PTHREAD_SPIN_LOCK(3) |
名称
pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock — スピンロックをロックするかまたはアンロックするライブラリ
POSIX Threads Library (libpthread, -lpthread)書式
#include < pthread.h> int
pthread_spin_lock( pthread_spinlock_t *lock);
int
pthread_spin_trylock( pthread_spinlock_t *lock);
int
pthread_spin_unlock( pthread_spinlock_t *lock);
解説
pthread_spin_lock() 関数は、 lock が現在別のスレッドによって所有されていないなら、それを獲得します。ロックがすぐに獲得することができないなら、利用可能になるまで (スリープしない) ロックを獲得する試みをおこないながらスピンします。pthread_spin_trylock() 関数は、すぐに lock を獲得することができないなら、エラーで返ることを除いて、 pthread_spin_lock() と同じです。
pthread_spin_unlock() 関数は、以前に、 pthread_spin_lock() か pthread_spin_trylock() への呼び出しによってロックされていなければならない、 lock を開放します。
戻り値
成功すれば、これらのすべての関数は、0 を返します。そうでなければ、エラーを示すエラー番号が返されます。これらの関数のいずれも EINTR を返しません。
エラー
pthread_spin_lock(), pthread_spin_trylock() と pthread_spin_unlock() 関数は、次の場合に失敗します:- [ EINVAL]
- lock によって指定された値が、無効であるか、または初期化されていません。
pthread_spin_lock() 関数は、次の場合に失敗します:
- [ EDEADLK]
- 呼び出しスレッドが、既にロックを所有しています。
pthread_spin_trylock() 関数は、次の場合に失敗します:
- [ EBUSY]
- 別のスレッドが現在、 lock を保持しています。
pthread_spin_unlock() 関数は、次の場合に失敗します:
- [ EPERM]
- 呼び出しスレッドが、 lock 所有していません。
歴史
pthread_spin_lock(), pthread_spin_trylock() と pthread_spin_unlock() 関数は、 FreeBSD 5.2 の N:M Threading Library (libkse, -lkse) と FreeBSD 5.3 の 1:1 Threading Library (libthr, -lthr) ではじめて登場しました。バグ
pthread_spin_lock(), pthread_spin_trylock() と pthread_spin_unlock() の実装は、 IEEE Std 1003.2 (“POSIX.2”) に適合するはずです。January 22, 2004 | FreeBSD |