我正在尝试解析 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 花费更少的周期来做同样的事情(确保线程的并发性)?