マルチスレッドのプログラミング

スピンロックの初期化

スピンロックを使用するために必要なリソースを割り当て、ロックをロック解除状態に初期化するには、pthread_spin_init(3C) 関数を使用します。

pthread_spin_init() の構文

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() の戻り値

pthread_spin_init() 関数は、正常終了時に 0 を返します。それ以外の場合は、次のいずれかのエラーコードが返されます。


EAGAIN

説明:

別のスピンロックを初期化するために必要なシステムリソースが不足しています。


EBUSY

説明:

スピンロックが別のスレッドで使用されている間 (たとえば、pthread_spin_lock() の呼び出しで使用されている間) にそのロックの初期化または削除の試行が検出されました。


EINVAL

説明:

lock で指定された値が無効です。