プロトタイプ: int sem_init(sem_t *sem, int pshared, unsigned int value); #include <semaphore.h> sem_t sem; int pshared; int ret; int value; /* セマフォの初期化 */ pshared = 0; value = 1; ret = sem_init(&sem, pshared, value); |
sema_init(3THR) は、sem が指すセマフォ変数を value の値に初期設定します。pshared の値が 0 なら、そのセマフォはプロセス間で共有できません。pshared の値が 0 以外なら、そのセマフォはプロセス間で共有できます。(Solaris スレッドについては、「sema_init(3THR)」を参照)。
複数のスレッドから同じセマフォを初期化してはいけません。
また、一度初期化したセマフォは、他のスレッドで使用されている可能性があるので再初期化してはいけません。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下の条件のいずれかが検出されると、この関数は失敗し、次の値を戻します。
value の値が SEM_VALUE_MAX を超えています。
そのセマフォを初期化するのに必要なリソースが使い果たされています。セマフォの制限 SEM_NSEMS_MAX に達しています。
そのセマフォを初期化するのに必要な特権をそのプロセスがもっていません。
pshared の値が 0 の場合は、そのプロセス内のスレッドだけがそのセマフォを使用できます。
#include <semaphore.h> sem_t sem; int ret; int count = 4; /* このプロセスでのみ使用 */ ret = sem_init(&sem, 0, count); |
pshared の値が 0 以外の場合は、他のプロセスによってそのセマフォは共有されます。
#include <semaphore.h> sem_t sem; int ret; int count = 4; /* プロセス間で共有 */ ret = sem_init(&sem, 1, count); |