Linuxで用いられる,一般的な排他制御の機構です。プロセスが利用する資源の排他処理などに利用されます。ちなみに「Semaphore」を日本語に訳すと,「腕木信号機」になります。
セマフォは,資源の個数を管理するカウンタ(整数値)です。排他制御が必要な資源ごとに1つのセマフォ(カウンタ)を用意し,そのセマフォには,初期値として資源の個数をセットします。
その資源を使った(獲得した)場合にはセマフォを「1」減らします。逆に資源を使い終わった(返却した)場合は,セマフォを「1」増やします。セマフォが「0」になった場合には,利用可能な資源がないことを示しています。
例えば,プロセスが資源を要求したときに,その資源のセマフォが「1」以上であれば資源を割り当てます。もし,セマフォが「0」であれば,使える資源がないので,割り当てないようにします。別のプロセスが使っていた資源が返却されることで,割り当てられる状態(セマフォが「1」以上)になったら,割り当てを開始します。こうすることで,資源の排他制御を実現します(図1)。
仕組みは簡単ですが,セマフォ自体に対しても排他制御が必要です。セマフォの値を増減できるのは,一度に1つの処理でなければなりません。