私はLinuxでpthreadを使用しています。あるスレッドから別のスレッドにデータを渡す循環バッファがあります。循環バッファーはここで使用するのに最適な構造ではないかもしれませんが、それを変更しても問題は解決しないので、単にキューとして参照します。スレッドの競合下で待機する最速のメソッド
キューが満杯か空であるときはいつでも、pop/push操作はNULLを返します。私のスレッドは定期的に起動するので、これは問題です。別のスレッドループを待つのは時間がかかります。
私はセマフォ(sem_post、sem_wait)を使用しようとしましたが、競合の下でロックを解除するにはループの速度と同じ約25ミリ秒かかります。私はpthread_cond_tで待機しようとしましたが、ロック解除には10〜15ミリ秒がかかります。
データを待つために使用できるより速いメカニズムがありますか?
EDIT *
いいえ条件変数を使用しました。私は組み込み機器に搭載されているので、「より多くのコアまたはCPUパワー」を追加することはオプションではありません。これにより私はすべてのスレッドの優先順位を全面的に設定していたので、これを先に並べ替える前に並べ替えるようにしました。
これらの同期機能をひどく悪用するか、その種類の時間を見つけるために行動をひどく誤って評価する必要があります。条件変数はあなたができる最高のものであり、事実上瞬間的です。どのようにそれらを使用していますか、おそらくもっと重要なのは、どのように測定していますか? –
ロックを解除する前と後の両方で、clock_gettime(CLOCK_REALTIME、&time)を使用しています – Eric
I/Oを実行して同じ行/関数呼び出しで終了時刻を取得していますか? –