2011-06-23 12 views
1

2つのpthreadの間にロックなしの単一プロデューサ、単一コンシューマ循環キューを実装したいと思います。 ARM LinuxではC言語で動作します。pthreadsを持つロックレス循環キュー。気にするものは何ですか?

キューはバイトを保持し、プロデューサはmemcpy()を行い、消費者はそれらをファイルに書き出します。

intに頭と尾のオフセットを格納できると思うのは素朴ですが、すべてがうまくいくでしょうか? コンパイラの最適化など、ヘッド/テールの書き込みがレジスタにあり、他のスレッドから見えない、またはどこかのメモリバリアを必要としているなどのことが考えられます。

答えて

4

pthreadsのメモリ一貫性モデルでは、ロックレスアルゴリズムを構築するための支援は提供されていません。あなたはあなた自身であり、アトミックな命令やメモリの障壁があなたのアーキテクチャによって提供され、必要とされるものを使用する必要があります。また、コンパイラーの障壁を要求する方法については、コンパイラーのドキュメントを参照する必要があります。

mutexと条件変数で保護されている通常のキュー実装を使用する方が良いでしょう。キューが単にデータ自体ではなくファイルに書き出されるバッファへのポインタを格納するだけの場合は、ポインタはキューに追加または削除されている間だけロックを保持する必要があるため、問題ではありません。

+0

ありがとうございます。それが私が向かっていた結論です。それを確認してもらいました。今のところmutexで安全にプレイし、早すぎる最適化を延期します。 – blueshift

関連する問題