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

セマフォーの減算

sem が指すセマフォー内のカウントが 0 より大きいときにこの値を不可分的に減らすには、sem_trywait(3RT) を使用します。

sem_trywait の構文

int sem_trywait(sem_t *sem);
#include <semaphore.h>

sem_t sem;
int ret;

ret = sem_trywait(&sem); /* try to wait for semaphore*/

この関数はブロックしない点を除いて、sem_wait() と同じ働きをします。つまり、失敗した場合にはただちに終了します。()

sem_trywait の戻り値

sem_trywait() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を返します。


EINVAL

説明:

sem が指すアドレスが正しくありません。


EINTR

説明:

この関数にシグナルが割り込みを行いました。


EAGAIN

説明:

そのセマフォーはすでにロックされているので、sem_trywait() でただちにロックできません。