我正在尝试解析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少一个周期来做同样的事情(保证线程的并发性)?
答案 0 :(得分:0)
很难说出你在这里问的是什么,但这不是compare_and_swap
的正确实现,因为它不是原子的。
正确的原子实现通常会利用比较和交换CPU指令。例如。在x86中LOCK CMPXCHG
。但是,使用系统库提供的函数来执行比较和交换(例如Windows API中的InterlockedCompareExchange
)或std::atomic<>
中的{{1}}的比较交换函数可能会好得多。 C ++ 11