0

ここからMichael-ScottFIFOキューを実装しようとしています。ABA問題の解決策を実装できません。このエラーが発生します。

error: incompatible type for argument 1 of '__sync_val_compare_and_swap'

参考までに、私はLinuxボックスを使用してこれをIntelアーキテクチャでコンパイルしています。私のセットアップについてさらに情報が必要な場合は、お問い合わせください。

sync_val_CAS最大32ビット値しか処理できないようです。したがって、ABA問題を排除するために使用されるカウンターを削除すると、すべてが正常にコンパイルおよび実行されます。

ここで使用する必要がある関連する64ビットCAS命令を知っている人はいますか?

追加の質問として、ロックフリーのFIFOキューのより良い(より速い)実装はありますか?私はこれにNirShavitetalが出くわしました。これは興味深いようです。他の人が同様の努力を見たのだろうか?ありがとう。

4

3 に答える 3

0

GCC, last I looked in 2009, does not support contigious double-word CAS. I had to implement in-line assembly.

You can find my implemenation of the M&S queue (including in the abstraction layer the assembly implementation of DCAS) and other lock-free data structures here;

http://www.liblfds.org

Briefly looking at the Nir Shavit et al paper, the queue requires Safe Memory Reclaimation, which I suspect you'll need to implement - it won't be built into the queue. An SMR API will be available in the next release (couple weeks).

于 2012-06-08T11:10:59.767 に答える
0

gcc を想定して、「march」スイッチを使用してみてください。このようなもの: -march=i686

__sync_bool_compare_and_swap もあります。速いかどうかはわかりません。

于 2012-06-06T17:21:46.590 に答える
0

ロックフリーは必ずしもウェイトフリーとは限らないため、ロックフリーはあなたが望むものではないかもしれません。高速なスレッド セーフ キュー (ロックフリーではない!) が必要な場合は、Threading Building Blocks concurrent_queueの使用を検討してください。

于 2014-02-20T21:23:51.137 に答える