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

sem_init の構文

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);