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

セマフォの減算

sem_trywait(3R)

プロトタイプ:
int	sem_trywait(sem_t *sem);
#include <semaphore.h>

sem_t sem;
int ret;

ret = sem_trywait(&sem); /* セマフォの値の変化を待つ */

sem_trywait() は、sem が指すセマフォの値が 0 より大きい場合は原子的操作によって 1 減らします。この関数はブロックしない点を除いて、sem_wait() と同じ働きをします。つまり、失敗した場合にはすぐに戻ります。

戻り値

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


EINVAL

sem が不当なアドレスを指しています。


EINTR

シグナルによってこの関数が割り込まれました。


EAGAIN

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