EN JA
PTHREAD_SPIN_LOCK(3)
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.2N:M Threading Library (libkse, -lkse)FreeBSD 5.31:1 Threading Library (libthr, -lthr) ではじめて登場しました。

バグ

pthread_spin_lock(), pthread_spin_trylock() と pthread_spin_unlock() の実装は、 IEEE Std 1003.2 (“POSIX.2”) に適合するはずです。
January 22, 2004 FreeBSD