スピンロックを使用するために必要なリソースを割り当て、ロックをロック解除状態に初期化するには、pthread_spin_init(3C) 関数を使用します。
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
#include <pthread.h> pthread_spinlock_t lock; int pshared; int ret; /* initialize a spin lock */ ret = pthread_spin_init(&lock, pshared);
pshared 属性は、次のいずれかの値を持ちます。
PTHREAD_PROCESS_SHARED
説明:スピンロックが割り当てられているメモリーにアクセスできるすべてのスレッドに、スピンロックの操作を許可します。このロックが複数のプロセスによって共有されているメモリーに割り当てられている場合にも、ロックの操作を許可します。
PTHREAD_PROCESS_PRIVATE
説明:スピンロックを、そのスピンロックを初期化したスレッドと同じプロセス内で作成されたスレッドだけが操作できるようにします。異なるプロセスのスレッドからスピンロックを操作しようとした場合、その結果は未定義です。プロセス共有の属性のデフォルト値は、PTHREAD_PROCESS_PRIVATE です。
pthread_spin_init() 関数は、正常終了時に 0 を返します。それ以外の場合は、次のいずれかのエラーコードが返されます。
EAGAIN
説明:別のスピンロックを初期化するために必要なシステムリソースが不足しています。
EBUSY
説明:スピンロックが別のスレッドで使用されている間 (たとえば、pthread_spin_lock() の呼び出しで使用されている間) にそのロックの初期化または削除の試行が検出されました。
EINVAL
説明:lock で指定された値が無効です。