SEM_OVERVIEW

Section: Linux Programmer's Manual (7)
Updated: 2020-06-09
Index JM Home Page
 

名前

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/ に書かれている。

関連キーワード

セマフォ, sem, 名前, 共有, プロセス, メモリー, OVERVIEW, wait, 操作, System

Linux マニュアル 一覧

[man1] [man2] [man3] [man4] [man5] [man6] [man7] [man8]
[a] [b] [c] [d] [e] [f] [g] [h] [i] [j] [k] [l] [m] [n] [o] [p] [q] [r] [s] [t] [u] [v] [w] [x] [y] [z]

 

Index

名前
説明
Versions
持続性
リンク
ファイルシステム経由での名前付きセマフォへのアクセス
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 12:08:34 GMT, June 11, 2022