C++11 標準ライブラリを使用すると (boost::thread
最終的には唯一の助けを借りて)、N リーダー - 1 プロデューサー ソリューションを実装するクリーンな方法があります。このソリューションでは、すべてのリーダーが一度 (std::condition_variable::notify_all()
たとえば) プロデューサーによって同時に通知されます。 、プロデューサーが最終的にクリティカルセクションに2回入る前に、クリティカルセクションに入ることが保証されています。つまり、通知されたすべてのリーダーは、共有リソースの同じ状態を監視する必要があります。プロデューサが N 人のリーダーに気付くと、N 人のリーダーすべてが読み取りを完了するまで、共有リソースを変更できません。N が事前にわからないため、boost::barrier は実際には必要なものではないことに注意してください。N は、通知ごとに異なる場合があります。
質問する
92 次
2 に答える
1
あなたが説明するものは障壁と呼ばれます
于 2012-12-18T13:21:39.457 に答える
1
プロデューサースレッドからのポーリングを使用して、アトミックカウンターを使用できます。
カウンタが or のいずれN
かに達する0
と (それはあなた次第です)、プロデューサーは作業を開始し、生成する必要があるものは何でも生成します。条件変数を通知する前に、プロデューサーはカウンターを0
(またはN
) に設定します。
リーダーが完了すると、単純にカウンターが増加 (または減少) します。
于 2012-12-18T13:16:56.707 に答える