2012-02-21 3 views
3

私はboost :: shared_mutexを使ってマルチリーダ/シングルライタミューテックスを実装しようとしています。私の質問はかなりシンプルですが、別のスレッドがshared_mutexを書き込みのためにロックしようとすると、スレッドがshared_mutexへの読者のアクセス権を得ることは可能でしょうか?例えば、私は10個のスレッドを持って、それらの一方のみを書くことができ、boost :: shared_mutexマルチリーダ/シングルライタミューテックス

  • スレッド1は、そのshared_mutexにshared_lockを持っており、
  • スレッド2は、そのshared_mutexにshared_lockを持っており、読み取ろうと 何かを読み取ろうとします 何か
  • スレッド3はそのshared_mutexにunique_lockのを持っており、
  • スレッド4は、そのshared_mutexにshared_lockを持っており、
  • 何かを読み取ろうとする何かを書き込もうとします
  • スレッド5は、そのshared_mutexにshared_lockを持っており、 何か

shared_mutexを読み取ろうとするが、現在スレッド2によってロックされて共有されている、私の質問は、スレッド4が読み取りアクセスを得ることが可能であるかどうかでありますそのshared_mutexに、前にスレッド3書くことができますか?リーダ/ライターミューテックスが飢餓状態になる可能性はありますか?たとえば、100リーダーvs。 1人の作家ですか?

ありがとうございました。

+0

重複:http://stackoverflow.com/questions/4203467/multiple-readers-single-writer-locks-in-boost –

+0

こことhttp://stackoverflow.com/questions/989795/example-for- boost-shared-mutex-multiple-reads-one-write –

+1

関連性はありますが、重複はありません。 – Thomas

答えて

3

明らかに、boost::shared_mutexは、実装までフェアネスポリシーを残しています。それは公平な、読者の上書き、または読者の読者のどちらでもかまいません。あなたの特定のバージョンに応じて、作家が飢えている可能性があります。

+0

チューダー、「リーダーオーバーライター」と「ライターオーバーリーダー」についてもっと教えてください。ありがとう。 – 2607

+0

reader-over-writerは、 'shared_lock'を実行するのを待っている読者が、' lock'を行うのを待っているライターより優先されることを意味します。ライターオーバーリーダーは反対です。 – Tudor

+0

"boost :: shared_mutex'が実装に至るまで公正なポリシーを残していると言ったとき、あなたはおそらく' boost :: shared_lock'(そして友人たち)がフェアネスポリシーをmutexの実装に残していると言っていました。 'boost :: shared_mutexリーダライター "政策(AFAIU)を実施しています。 "writer-over-reader" mutexポリシーのためのboost実装がありますか、それとも独自の実装が必要ですか? – Guss

関連する問題