Provided by: manpages-ja_0.5.0.0.20221215+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 を 設定でき、オブジェク
       トへの許可をユーザー単位、グループ単位で制御することが できる。

注意

       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), shm_overview(7)

この文書について

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