2009-08-30 6 views
4

複数のプロデューサと複数のコンシューマで共有されるキューリソースがあります。すべてが独立したプロセスです。キューの「所有」プロセスはありません。マルチプロセス同期 - セマフォより優れていますか?

実装の性質上、キューへのアクセスは制御されなければならず、特定の瞬間にプッシュまたはポップするプロセスを1つだけ許可する必要があります。

私はPOSIXという名前のセマフォを使って正しいソリューションになると考えましたが、詳細のいくつかが私を悩ませています。 (これはLinuxのみの実装で、btwです)

  1. (いつか)私はsem_unlinkを行うべきですか?実際にキューを削除する理由はありますか?

  2. キューセマフォをロックしたままでプロセスが死んでしまうのではないかと心配しています。これの周りに良い方法がありますか?私はロックを取得しようとすると、タイムアウト待ちをすることができますが、タイムアウトが切れると、私は現在競合状態に陥っています。

  3. このような単純なバイナリロックには、より良い解決策がありますか?おそらく、fcntlや排他的なファイルを使用しているロックファイルですか?

答えて

3

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

もっと複雑なセマンティクスが必要なときにセマフォを使うと想像することができます(彼らはあなたが念頭に置いているミューテックスの使用をサポートする以上のことをしています)。しかし、私がそれらを使うと、時代遅れのときにハウスキーピングを行うために、死。私は、Windows上のLotus Notesには、 "ZapNotes"ハウスキーパーがあります。私が想定していることは、「起こってはいけない」シナリオだと思います。

+0

これらはサービスベースのアプリケーションなので、ここでは私が使用した「Kill​​Notes」はうまくいきませんでしたが、提案に感謝します。 – Joe

+0

提案は実際にはファイルロックを使用することでした。このようなKillNotesのようなハウスキーピング・クルージュの必要性から、私はセンパホールの使用を恥ずかしがります。 – djna

+0

申し訳ありませんが、私はあなたの意図を理解しました。 – Joe

関連する問題