Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

compare-and-swap

compare-and-swap (比较与交换)

C的实现:

1
2
3
4
5
6
7
8
9
int compare_and_swap(int* reg, int oldval, int newval)
{
ATOMIC();
int old_reg_val = *reg;
if (old_reg_val == oldval)
*reg = newval;
END_ATOMIC();
return old_reg_val;
}

更新reg这块内存地址,如果值是oldval则更新成newval。

思路:如果是期望值,则更新成新值,否则返回老值作为一下次循环的期望值。

java相关:

  • java.util.concurrent.atomic implements compareAndSet in various classes
  • java.util.concurrent.ConcurrentLinkedQueue

参考:
https://en.wikipedia.org/wiki/Compare-and-swap
http://www.tuicool.com/articles/zuui6z
http://ifeve.com/atomic-operation/