1

これはばかげているかもしれませんが、カウントが1以上のセマフォを使用するソフトウェアのいわゆる「実際の」例を探しています。

言い換えれば、用心棒、司書、トイレの例はご遠慮ください。

4

2 に答える 2

1

私は「読み取り/書き込み」ロックにこのようなものを使用したと思います。つまり、最大N個の同時リーダーを許可し、アクティブなリーダーがない場合は一度に1人のライターのみを許可したいと思います。

したがって、読み取りスレッドはセマフォをロックし、読み取りカウントを増やします。読み取りカウントがNより小さい場合、ロックは成功し、リーダーは続行できます。そうでない場合、ロックによりリーダースレッドがsched_yieldになります。

書き込みのためにロックしたい場合は、カウントをNに設定して、これ以上リーダーがロックできないようにします。たとえば、ロックしようとするとすべてのリーダーがスリープ状態になります。ライタースレッドは、読み取りセマフォをロックしようとし続けます。リーダーが解放されるたびに、ライターは、リーダーがなくなるまでNを再びインクリメントします。

次に、書き込みロックが成功し、書き込み操作が発生し、読み取りセマフォがゼロに戻されて、リーダースレッドが続行できるようになります。

于 2012-06-24T18:04:02.307 に答える
0

エンドレスカウントのセマフォ(Win32ではLONG​​_MAX)は、送信者と消費者のスキームを実装するために使用されます。このようなセマフォは、maxで作成されます。count = LONG_MAX(0xFFFFFF ...)。送信者(リソース作成者)は、いくつかのリソースを作成し、セマフォを解放します。受信者(リソースコンシューマー)はこのセマフォを待機し、送信者がこのセマフォを解放すると1回だけウェイクアップします。1を超える他の値については、使用したことがありません。

于 2012-06-24T13:13:56.397 に答える