0
私に見える機能はうまくいきます。私は、マルチスレッドアプリケーション用のカウンタを実装しようとしています。カウンタの値は整数の範囲を超えている可能性があるため、64ビットを使用しています。スレッドの安全性についてはあまりよく分かりませんが、ここでは64ビットの数値を扱っています。誰かが次のインラインアセンブリコードgccの比較と設定の正しさを検証できますか?
UINT64 get_and_increment(volatile UINT64* dest) {
UINT64 old_value, new_value;
bool result = false;
while(!result) {
old_value = *dest;
new_value = old_value + 1;
__asm__ volatile (
"lock cmpxchg %3, %1 \n setzb %0"
: "=m"(result), "+m" (*dest)
: "a" (old_value), "r"(new_value)
);
}
return old_value;
}
おかげ
Sudhanshuシュクラ