0

C++11 標準ライブラリを使用すると (boost::thread最終的には唯一の助けを借りて)、N リーダー - 1 プロデューサー ソリューションを実装するクリーンな方法があります。このソリューションでは、すべてのリーダーが一度 (std::condition_variable::notify_all()たとえば) プロデューサーによって同時に通知されます。 、プロデューサーが最終的にクリティカルセクションに2回入る前に、クリティカルセクションに入ることが保証されています。つまり、通知されたすべてのリーダーは、共有リソースの同じ状態を監視する必要があります。プロデューサが N 人のリーダーに気付くと、N 人のリーダーすべてが読み取りを完了するまで、共有リソースを変更できません。N が事前にわからないため、boost::barrier は実際には必要なものではないことに注意してください。N は、通知ごとに異なる場合があります。

4

2 に答える 2

1

あなたが説明するものは障壁と呼ばれます

于 2012-12-18T13:21:39.457 に答える
1

プロデューサースレッドからのポーリングを使用して、アトミックカウンターを使用できます。

カウンタが or のいずれNかに達する0と (それはあなた次第です)、プロデューサーは作業を開始し、生成する必要があるものは何でも生成します。条件変数を通知する前に、プロデューサーはカウンターを0(またはN) に設定します。

リーダーが完了すると、単純にカウンターが増加 (または減少) します。

于 2012-12-18T13:16:56.707 に答える