EN JA
PTHREAD_SPIN_INIT(3)
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 初期化して、それを使用し始めるために必要ないくつかのリソースを割り付けます。 psharedPTHREAD_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.2N:M Threading Library (libkse, -lkse)FreeBSD 5.31: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