IPCで用意されるプロセス間通信用機能の一つで、プロセス間の共有資源へのアクセス衝突を防止(排他制御)するために利用する共有メモリ上のフラグ変数を格納したデータ配列およびそれに対する操作機能のこと。
セマフォ用のデータは配列のため、フラグを複数個用意することができ、処理内容によって使い分けることができる。
またセマフォ変数にはバイナリセマフォと汎用セマフォの2種類を利用することができる。
セマフォの配列への操作処理(値の参照から更新またはブロッキングまで)はOS側でアトミックに行なわれることが保証されており、他のプロセスからの処理が割り込むことは無い。
これは、排他制御処理における重要な前提である。
バイナリセマフォは0か1のどちらかの値しか持たないセマフォで、重要度の高い処理のブロックに用いられる。
基本的にフラグは最初1にセットされており、特定のプロセスが処理開始時にこのフラグをデクリメント(−1)し、処理の終了と共にインクリメント(+1)する。他のプロセスがこれを同時に処理しようとすると、フラグが0になっているためにデクリメントに失敗し、処理がブロックされプロセスがOSレベルで休止状態にされる。
後に処理が完了しフラグが1に戻ると、プロセスキューに溜められた休止中のプロセスがOSによって順にチェックされ、処理を再開する。
なお、フラグ操作に失敗したときに自動的にプロセスを休止しないノンブロッキング指示を与えることもでき、この場合のプロセスの挙動はプログラム側に委ねられる。
汎用セマフォはカウンターであり、資源に一定の空き数がある場合に利用される。
基本的に値は資源の空き数に設定され、特定のプロセスが処理開始時に値のデクリメント(−1)を行ない、処理終了時にインクリメント(+1)を行なう。空き数を使い切り、デクリメントに失敗した場合のブロッキング処理はバイナリセマフォと同様である。