SEM_OVERVIEW
Section: Linux Programmer's Manual (7)
Updated: 2006-03-25
Index
JM Home Page
roff 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
という形式の名前で識別される。
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) に配置される。
プロセス共有セマフォは、共有メモリ領域 (例えば、
semget(2)
を使って作成できる System V 共有メモリ・セグメントや
shm_open(3)
を使って作成できる POSIX 共有メモリ・オブジェクト)
内に配置しなければならない。
名前なしセマフォは、使用する前に
sem_init(3)
を使って初期化しなければならない。
セマフォは
sem_post(3)
と
sem_wait(3)
を使って操作できる。
セマフォがもはや必要なくなったときや、
セマフォが置かれているメモリを解放する前には、
sem_destroy(3)
を使ってセマフォを破棄すべきである。
この節の残りでは、POSIX セマフォの Linux の実装の詳細
について説明する。
バージョン
バージョン 2.6 より前のカーネルでは、Linux は
名前なしのスレッド共有セマフォのみをサポートしていた。
Linux 2.6 と NPTL スレッド実装を提供している glibc が入った
システムでは、POSIX セマフォの完全な実装が提供される。
持続性
POSIX 名前付きセマフォはカーネル内で保持される。
sem_unlink(3)
で削除されなければ、セマフォは
システムがシャットダウンされるまで存在し続ける。
リンク
POSIX セマフォ API を使用したプログラムは
cc -lrt
でコンパイルし、リアルタイムライブラリ
librt
とリンクしなければならない。
ファイルシステム経由での名前付きセマフォへのアクセス
Linux では、名前付きセマフォは仮想ファイルシステム
(virtual file system) 内に
sem.name
という形の名前で作成される。仮想ファイルシステムは通常
/dev/shm
以下にマウントされる。
準拠
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_init(3),
sem_getvalue(3),
sem_open(3),
sem_post(3),
sem_unlink(3),
sem_wait(3),
pthreads(7)
Index
- 名前
-
- 説明
-
- バージョン
-
- 持続性
-
- リンク
-
- ファイルシステム経由での名前付きセマフォへのアクセス
-
- 準拠
-
- 注意
-
- 例
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:32:01 GMT, November 19, 2007