sem が指すセマフォーカウントが 0 より大きくなるまで呼び出しスレッドをブロックし、0 より大きくなったら不可分的にカウントを減らすには、sem_wait(3RT) を使用します。
int sem_wait(sem_t *sem);
#include <semaphore.h> sem_t sem; int ret; ret = sem_wait(&sem); /* wait for semaphore */
sem_wait() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を返します。
EINVAL
説明:sem が指すアドレスが正しくありません。
EINTR
説明:この関数にシグナルが割り込みを行いました。