int sem_init(sem_t *sem, int pshared, unsigned int value);
#include <semaphore.h> sem_t sem; int pshared; int ret; int value; /* initialize a private semaphore */ pshared = 0; value = 1; ret = sem_init(&sem, pshared, value);
pshared の値が 0 なら、そのセマフォーはプロセス間で共有できません。pshared の値が 0 以外なら、そのセマフォーはプロセス間で共有できます。
複数のスレッドから同じセマフォーを初期化してはいけません。
一度初期化したセマフォーは、ほかのスレッドが使用している可能性があるので、再初期化してはいけません。
pshared が 0 の場合、セマフォーを使用できるのは、このプロセス内のスレッドだけです。
#include <semaphore.h> sem_t sem; int ret; int count = 4; /* to be used within this process only */ ret = sem_init(&sem, 0, count);
pshared が 0 以外の場合、セマフォーは複数のプロセスで共有可能です。
#include <semaphore.h> sem_t sem; int ret; int count = 4; /* to be shared among processes */ ret = sem_init(&sem, 1, count);