図1 セマフォを用いた排他制御(プロセスAとプロセスBが同じ資源を利用している例)
図1 セマフォを用いた排他制御(プロセスAとプロセスBが同じ資源を利用している例)
[画像のクリックで拡大表示]

 Linuxで用いられる,一般的な排他制御の機構です。プロセスが利用する資源の排他処理などに利用されます。ちなみに「Semaphore」を日本語に訳すと,「腕木信号機」になります。

 セマフォは,資源の個数を管理するカウンタ(整数値)です。排他制御が必要な資源ごとに1つのセマフォ(カウンタ)を用意し,そのセマフォには,初期値として資源の個数をセットします。

 その資源を使った(獲得した)場合にはセマフォを「1」減らします。逆に資源を使い終わった(返却した)場合は,セマフォを「1」増やします。セマフォが「0」になった場合には,利用可能な資源がないことを示しています。

 例えば,プロセスが資源を要求したときに,その資源のセマフォが「1」以上であれば資源を割り当てます。もし,セマフォが「0」であれば,使える資源がないので,割り当てないようにします。別のプロセスが使っていた資源が返却されることで,割り当てられる状態(セマフォが「1」以上)になったら,割り当てを開始します。こうすることで,資源の排他制御を実現します(図1)。

 仕組みは簡単ですが,セマフォ自体に対しても排他制御が必要です。セマフォの値を増減できるのは,一度に1つの処理でなければなりません。