解析compare_and_swap

时间:2013-09-25 05:19:04

标签: concurrency synchronization

我正在尝试解析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;

1st:compare和swap返回0,lock设置为1,关键部分运行,lock设置为0.

冲洗并重复

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

1 个答案:

答案 0 :(得分:0)

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

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