Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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 valueSEM_VALUE_MAX を超えている。

       ENOSYS pshared    が    0     以外だが、システムがプロセス共有セマフォをサポートしていない
              (sem_overview(7)  参照)。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├─────────────────┼───────────────┼─────────┤
       │sem_init()       │ Thread safety │ MT-Safe │
       └─────────────────┴───────────────┴─────────┘

準拠

       POSIX.1-2001.

注意

       妙なことに、POSIX.1-2001   は   sem_init()    が成功した場合に返すべき値を規定していない。
       POSIX.1-2008 ではこれが修正され、成功時には 0 を返すことが規定された。

       sem_open(3) と sem_wait(3) を参照。

関連項目

       sem_destroy(3), sem_post(3), sem_wait(3), sem_overview(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。