0

我正在尝试解析 compare_and_swap,因为老实说我什么都不懂。

do { while (compare_and_swap(&lock, 0, 1) != 0)
; /* do nothing */
/* critical section */
lock = 0;
/* remainder section */
} while (true);



int compare and swap(int *value, int expected, int new_value) {
int temp = *value;
if (*value == expected)
*value = new_value;
return temp;
}

假设 lock 设置为 0;

第一种:比较和交换返回 0,锁设置为 1,运行临界区,锁设置为 0。

冲洗并重复

我不知道我是否解析得很好,但是比较和交换是否可能比 test_and_set 花费更少的周期来做同样的事情(确保线程的并发性)?

4

1 回答 1

0

很难说出您在这里实际问的是什么,但这不是 的正确实现compare_and_swap,因为它不是原子的。

正确的原子实现通常会利用比较和交换 CPU 指令。例如在 x86 中LOCK CMPXCHGInterlockedCompareExchange但是,使用系统库提供的函数来执行比较和交换(例如在 Windows API 中)或std::atomic<>C++11 中的比较交换函数可能会好得多。

于 2013-09-25T08:08:54.503 回答