Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
sem_init - 名前なしセマフォを初期化する
書式
#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); -pthread とリンクする。
説明
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) 参照)。
属性
マルチスレッディング (pthreads(7) 参照) sem_init() 関数はスレッドセーフである。
準拠
POSIX.1-2001.
注意
妙なことに、POSIX.1-2001 は sem_init() が成功した場合に返すべき値を規定していない。 POSIX.1-2008 ではこれが修正され、成功時には 0 を返すことが規定された。
関連項目
sem_destroy(3), sem_post(3), sem_wait(3), sem_overview(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。