Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all bug

名前

       sem_overview - POSIX セマフォの概要

説明

       POSIX セマフォを使用すると、プロセスやスレッド間でその動作を 同期させることができる。

       セマフォは整数であり、その値は決して 0 未満になることは許されない。 セマフォに対してできる操作は 2 つであ
       る: セマフォ値を 1 増やす (sem_post(3)); セマフォ値を 1 減らす (sem_wait(3))。 セマフォの値がすでに 0  の
       場合、セマフォ値が 0 より大きくなるまで sem_wait(3)  操作は停止 (block) する。

       POSIX セマフォには、名前付きセマフォ (named semaphore) と 名前なしセマフォ (unnamed semaphore) の 2つの形
       がある。

       名前付きセマフォ
              名前付きセマフォは /somename という形式の名前で識別される。 その名前は、最大で NAME_MAX-4  (すなわ
              ち 251) 文字のヌル終端された文字列で、 スラッシュで始まり、スラッシュ以外の文字が 1 文字以上続く形
              式である。 sem_open(3) に同じ名前を渡すことにより、2 つのプロセス間で同じ名前のセマフォ に対し操作
              を行うことができる。

              sem_open(3)  関数は、新しい名前付きセマフォを作成するか、既に存在する名前付き セマフォをオープンす
              る。 セマフォをオープンした後は、 sem_post(3)  と sem_wait(3)  を使ってセマフォを操作できる。 プロ
              セスがセマフォの使用を終えた際は、 sem_close(3)  を使ってセマフォをクローズできる。 あるセマフォを
              どのプロセスも使用しなくなると、 sem_unlink(3)  を使ってそのセマフォをシステムから削除することがで
              きる。

       名前なしセマフォ (メモリーベースセマフォ)
              名前なしセマフォは名前を持たない。その代わり、セマフォは、    複数スレッド間で共有されるメモリー領
              域、もしくは複数プロセス間で   共有されたメモリー領域に置かれる    (前者を    スレッド共有セマフォ
              (thread-shared semaphore)、 後者を プロセス共有セマフォ (process-shared semaphore) と呼ぶ)。スレッ
              ド共有セマフォは、同じプロセス内のスレッド間で共有される   メモリー領域、例えば大域変数    (global
              variable)  に配置される。 プロセス共有セマフォは、共有メモリー領域 (例えば、 shmget(2)  を使って作
              成できる System V 共有メモリーセグメントや shm_open(3)  を使って作成できる POSIX  共有メモリーオブ
              ジェクト)  内に配置しなければならない。

              名前なしセマフォは、使用する前に    sem_init(3)    を使って初期化しなければならない。   セマフォは
              sem_post(3)  と sem_wait(3)  を使って操作できる。 セマフォがもはや必要なくなったときや、  セマフォ
              が置かれているメモリーを解放する前には、 sem_destroy(3)  を使ってセマフォを破棄すべきである。

       この節の残りでは、POSIX セマフォの Linux の実装の詳細 について説明する。

   Versions
       バージョン   2.6  より前のカーネルでは、Linux  は  名前なしのスレッド共有セマフォのみをサポートしていた。
       Linux 2.6 と NPTL スレッド実装を提供している glibc が入った システムでは、POSIX  セマフォの完全な実装が提
       供される。

   持続性
       POSIX 名前付きセマフォはカーネル内で保持される。 sem_unlink(3)  で削除されなければ、セマフォは システムが
       シャットダウンされるまで存在し続ける。

   リンク
       POSIX セマフォ API を使用したプログラムは cc -pthread でコンパイルし、リアルタイムライブラリ librt とリン
       クしなければならない。

   ファイルシステム経由での名前付きセマフォへのアクセス
       Linux では、名前付きセマフォは仮想ファイルシステム (virtual file system) 内に sem.somename という形の名前
       で作成される。仮想ファイルシステムは通常 /dev/shm 以下にマウントされる。  (これが、セマフォの名前の文字数
       の上限が NAME_MAX ではなく NAME_MAX-4 となっている理由である。)

       Linux 2.6.19 以降では、このディレクトリ配下のファイルに対して ACL を 設定でき、オブジェクトへの許可をユー
       ザー単位、グループ単位で制御することが できる。

準拠

       POSIX.1-2001.

注意

       System V セマフォ (semget(2), semop(2)  など) は古いセマフォ API である。 POSIX セマフォは System V  より
       も  簡単で、うまく設計されたインターフェースを提供している。 一方で、POSIX セマフォは System V セマフォと
       比べると 利用できるシステムが少ない (特に、古いシステムでは少ない)。

       各種の POSIX セマフォ関数を使用した例が sem_wait(3)  に記載されている。

関連項目

       sem_close(3), sem_destroy(3),  sem_getvalue(3),  sem_init(3),  sem_open(3),  sem_post(3),  sem_unlink(3),
       sem_wait(3), pthreads(7)

この文書について

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