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舒克拉