rwlp が指す読み取り/書き込みロックを初期化して、ロック状態を解除するには、rwlock_init(3C) を使用します。
#include <synch.h> (or #include <thread.h>) int rwlock_init(rwlock_t *rwlp, int type, void * arg);
type は、次のいずれかになります。
USYNC_PROCESS 読み取り/書き込みロックを使って、このプロセスとほかのプロセスのスレッド間で同期をとることができます。arg は無視されます。
USYNC_THREAD 読み取り/書き込みロックを使って、このプロセス内のスレッドの間だけで同期をとることができます。arg は無視されます。
複数のスレッドから同じ読み取り/書き込みロックを同時に初期化してはいけません。0 に初期化したメモリーに領域を確保することによって、読み取り/書き込みロックを初期化することもできます。その場合は、type に USYNC_THREAD を指定したものとみなされます。一度初期化した読み取り/書き込みロックは、ほかのスレッドで使われている可能性があるので再初期化してはいけません。
POSIX スレッドの場合については、「pthread_rwlock_init の構文」を参照してください。
#include <thread.h> rwlock_t rwlp; int ret; /* to be used within this process only */ ret = rwlock_init(&rwlp, USYNC_THREAD, 0);
#include <thread.h> rwlock_t rwlp; int ret; /* to be used among all processes */ ret = rwlock_init(&rwlp, USYNC_PROCESS, 0);
rwlock_init()は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を返します。
EINVAL
説明:引数が無効です。
EFAULT
説明:rwlp または arg が不当なアドレスを指しています。