セマフォ
生産者/消費者問題(英語版)では、1つの実行単位(生産者)がデータを生成し、もう1つの実行単位(消費者)がそれらを受け取って使用する。データの受け渡しは最大サイズNのキューで行い、次のような条件に従う。
キューが空の場合、消費者は生産者がデータを生成するのを待たなければならない。
キューが満杯の場合、生産者は消費者がデータを消費するのを待たなければならない。
生産者/消費者問題をセマフォで解決する場合、キューの状態を2つのセマフォで表す。emptyCount はキュー上の空いているスロット数を保持し、fullCount はキュー上の要素数を保持する。完全性を維持するには、emptyCount を実際の空きスロット数より小さくなるようにし、fullCount を実際のキュー上の要素数より小さくなるようにする(どちらも実際の数を越えてはならない)。空きスロットと要素は、空の箱と満たされた箱という2種類の資源を表しており、セマフォ emptyCount と fullCount はそれら資源についての制御を管理する。
バイナリセマフォ useQueue は、例えば2つの生産者が同時にデータをキューに格納しようとするなどといった不正な状態が発生しないことを保証するためにある。このバイナリセマフォはミューテックスで代替することもできる。