4

複数のプロデューサーと複数のコンシューマーで共有されるキュー リソースがあります。すべてが独立したプロセスです。キューを「所有」するプロセスはありません。

実装の性質上、キューへのアクセスを制御する必要があり、任意の時点でプッシュまたはポップできるプロセスは 1 つだけです。

セマフォという名前の POSIX を使用することが適切な解決策になると考えましたが、いくつかの詳細が気になります。(これは Linux のみの実装です。)

  1. sem_unlink を実行する必要があるのはいつですか? 実際にキューを削除する理由はありますか?

  2. キュー セマフォをロックしたままプロセスが停止することが心配です。これを回避する良い方法はありますか?ロックを取得しようとするときに一定時間待機することはできますが、タイムアウトになると競合状態になります。

  3. このような単純なバイナリ ロックのより良い解決策はありますか? おそらく、fcntl および/または排他的オープンを使用したロックファイルでしょうか?

4

1 に答える 1

3

ファイル ロックには、予期しないプロセスの終了が発生した場合にロックを解除できるという利点があります。それらがあなたのシナリオに最も適していると思います。

セマフォがサポートするより複雑なセマンティクスが必要な場合にセマフォを使用することを想像できます (セマフォは、あなたが考えているミューテックスの使用をサポートする以上のことを行います)。Windows 上の Lotus Notes には「ZapNotes」ハウスキーパーがあり、同様の「起こるべきではない」シナリオであると私が想定していることを整理していることに気付きました。

于 2009-08-30T16:22:57.043 に答える