我正在尝试解析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;
1:比较和交换返回0,lock设置为1,运行临界区,lock设置为0。
冲洗并重复
我不知道我是否正确地解析了它,但是有没有可能比较和交换比test_and_set少一个周期来做同样的事情(确保线程的并发性)?
发布于 2013-09-25 16:08:55
很难判断您在这里实际请求的是什么,但这不是compare_and_swap的正确实现,因为它不是原子的。
正确的原子实现通常会利用比较并交换CPU指令。例如在x86 LOCK CMPXCHG中。但是,使用系统库提供的用于执行比较和交换的函数(如Windows API中的InterlockedCompareExchange )或C++11中的std::atomic<>的比较交换函数可能要好得多。
https://stackoverflow.com/questions/18996794
复制相似问题