sem_init - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
sem_init - 名前なしセマフォを初期化する
書式
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
説明
sem_init
()は、
sem
が指すアドレスにある名前なしセマフォを初期化する。
value
引き数はそのセマフォの初期値を指定する。
pshared
引き数は、このセマフォがプロセス内のスレッド間で共有されるのか、
プロセス間で共有されるのか、を示す。
pshared
が 0 の場合、セマフォはプロセス内のスレッド間で共有される。
セマフォはすべてのスレッドから参照可能なアドレスに配置すべきである
(例えば、大域変数や、ヒープ上に動的に割り当てられた変数など)。
pshared
が 0 以外の場合、セマフォはプロセス間で共有される。セマフォは
共有メモリ領域に配置すべきである
(
shm_open
(3),
mmap
(2),
shmget
(2) 参照)。
(
fork
(2)で生成された子プロセスは親プロセスのメモリマッピングを継承するため、
子プロセスもセマフォにアクセスできる。)
共有メモリ領域にアクセスできるプロセスならば、どのプロセスでも
sem_post
(3) や
sem_wait
(3) などを使ってセマフォを操作できる。
すでに初期化済のセマフォを初期化した場合の挙動は定義されていない。
返り値
成功すると、 sem_init ()は 0 を返す。エラーの場合、-1 を返し、 errno にエラーを示す値をセットする。
エラー
- EINVAL
- value が SEM_VALUE_MAX を超えている。
- ENOSYS
- pshared が 0 以外だが、システムがプロセス共有セマフォをサポートしていない ( sem_overview (7)参照)。
準拠
POSIX.1-2001.
注意
妙なことに、POSIX.1-2001 は sem_init ()が成功した場合に返すべき値を規定していない。しかしながら、 ほとんどすべての実装がこの場合 0 を返す。