リーダーライターロックを実装しました
typedef boost::unique_lock<boost::shared_mutex> WriterLock;
typedef boost::shared_lock<boost::shared_mutex> ReadersLock;
ここには、多くのマルチスレッドリーダーと少数のライターしかありません。リーダーは他のリーダーとアクセスを共有しますが、ライターをブロックします。ライターは、リソースへの排他的アクセスができるまでブロックします。
ブーストドキュメントでこれを見つけることができませんでした...ライターの飢餓を防ぐためのポリシーは何ですか?
たとえば、すべてのリーダーがスレッドプールからロックをドキドキしている場合、ライターが最終的にロックを取得するまでのロック試行回数に上限はありますか?
リーダーがまったくなくなるまで書き込みを待機する必要があることを示しているように見えるパフォーマンスの数値が見られます。現在のリーダーのサービス中に新しいリーダーがロックを要求できるため、それが長い時間になることはまれです。その場合、私たちのコードでは、ライターは読み取りがまったくなくなるまで非常に長い時間を待たなければならないようです。
ライターがロックを要求すると、現在のすべてのリーダーが排出されますが、すべての新しい着信リーダーがライター要求の背後でブロックされる、よりキューのようなシステムをお勧めします。
Boostのアップグレード可能なロックの概念の動作は何ですか? ブーストスレッド
それは、作家の飢餓をどのように処理するかについてはどちらの方法でも述べていません。