【发布时间】:2020-11-17 16:18:49
【问题描述】:
比较和交换函数的Silberschatz实现如下
int compare_and_swap(int *value, int expected, int new_value) {
int temp = *value;
if (*value == expected)
*value = new_value;
return temp;
}
可以用来实现原子增量函数
void increment(atomic_int *v)
{
int temp;
do {
temp = *v;
}
while (temp != compare_and_swap(v, temp, temp+1));
}
我的问题是:在什么情况下 do-while 条件为真以触发第二个循环,从而触发第二个 compare_and_swap 调用?
据我了解,compare_and_swapalways 返回旧的v,但在调用它之前,temp 值已使用v 值初始化,因此compare_and_swap 首先返回temp,并且条件比失败导致退出循环。
我错过了什么吗?
【问题讨论】:
标签: c concurrency atomic compare-and-swap