簡単な Producer/Consumer プログラムを作成する実験を試みました。それらは別々のスレッドで実行されます。プロデューサはいくつかのデータを生成し、コンシューマは別のスレッドでそれを取得します。私が達成したメッセージング遅延は、約 100 ナノ秒です。これが合理的かどうか、またははるかに高速な実装があるかどうか、誰か教えてもらえますか?
私はロックを使用していません...単純なメモリカウンターです。私の実験はここで説明されています:
http://tradexoft.wordpress.com/2012/10/22/how-to-move-data-between-threads-in-100-nanoseconds/
基本的に、消費者はカウンターがインクリメントされるのを待ってから、ハンドラー関数を呼び出します。したがって、実際には多くのコードはありません。それでも100nsかかるのには驚きました。
コンシューマーは次のようになります。
void operator()()
{
while (true)
{
while (w_cnt==r_cnt) {};
auto rc=process_data(data);
r_cnt++;
if (!rc)
break;
}
}
プロデューサは、利用可能なデータがある場合、単純に w_cnt をインクリメントします。
もっと速い方法はありますか?