これはばかげているかもしれませんが、カウントが1以上のセマフォを使用するソフトウェアのいわゆる「実際の」例を探しています。
言い換えれば、用心棒、司書、トイレの例はご遠慮ください。
これはばかげているかもしれませんが、カウントが1以上のセマフォを使用するソフトウェアのいわゆる「実際の」例を探しています。
言い換えれば、用心棒、司書、トイレの例はご遠慮ください。
私は「読み取り/書き込み」ロックにこのようなものを使用したと思います。つまり、最大N個の同時リーダーを許可し、アクティブなリーダーがない場合は一度に1人のライターのみを許可したいと思います。
したがって、読み取りスレッドはセマフォをロックし、読み取りカウントを増やします。読み取りカウントがNより小さい場合、ロックは成功し、リーダーは続行できます。そうでない場合、ロックによりリーダースレッドがsched_yieldになります。
書き込みのためにロックしたい場合は、カウントをNに設定して、これ以上リーダーがロックできないようにします。たとえば、ロックしようとするとすべてのリーダーがスリープ状態になります。ライタースレッドは、読み取りセマフォをロックしようとし続けます。リーダーが解放されるたびに、ライターは、リーダーがなくなるまでNを再びインクリメントします。
次に、書き込みロックが成功し、書き込み操作が発生し、読み取りセマフォがゼロに戻されて、リーダースレッドが続行できるようになります。
エンドレスカウントのセマフォ(Win32ではLONG_MAX)は、送信者と消費者のスキームを実装するために使用されます。このようなセマフォは、maxで作成されます。count = LONG_MAX(0xFFFFFF ...)。送信者(リソース作成者)は、いくつかのリソースを作成し、セマフォを解放します。受信者(リソースコンシューマー)はこのセマフォを待機し、送信者がこのセマフォを解放すると1回だけウェイクアップします。1を超える他の値については、使用したことがありません。