セマフォ:資源アクセスを制御する仕組み
複数の仕事仲間が同じ道具を使いたい時、順番に使わないと混乱が生じますよね? 例えば、プリンターを3台置いている職場では、同時に3人までしか印刷できません。4人目が印刷したい場合は、誰かが使い終わるまで待つ必要があります。コンピューターの世界でも、複数のプログラムが同時に同じ資源(例えば、記憶装置の一部やプリンターなど)を使いたい場合があります。このような場合に、資源へのアクセスを整理し、秩序を守るための仕組みが「信号機」です。 信号機は、プログラムが資源を使える状態かどうかを示すカウンターのような役割を果たします。
カウンターの数字は、資源にアクセスできるプログラムの数の上限を示しています。例えば、カウンターが3であれば、同時に3つのプログラムまでが資源にアクセスできます。4つ目のプログラムは、カウンターが0になり、アクセス可能な状態になるまで待機します。プログラムが資源を使い始めると、カウンターの数字は1減ります。使い終わると、カウンターの数字は1増えます。このようにして、信号機は資源へのアクセスを制御し、複数のプログラムが同時に同じ資源にアクセスして起こる問題を防ぎます。 この仕組みにより、データが壊れたり、プログラムが誤作動したりすることを防ぎ、コンピューターシステム全体の安定性を保つことができます。
信号機には様々な種類があり、それぞれ異なる機能を持っています。 例えば、「二進信号機」はカウンターが0と1だけの単純な信号機で、資源を排他的に利用したい場合に役立ちます。「計数信号機」は、カウンターが任意の値を取り、複数のプログラムが同時に資源にアクセスできる数を制限したい場合に役立ちます。このように、信号機は目的に合わせて様々な使い方ができます。プログラムを安全かつ効率的に動作させるために、信号機は欠かせない仕組みと言えるでしょう。