compare-and-swap (比较与交换)
C的实现:
1 | int compare_and_swap(int* reg, int oldval, int newval) |
更新reg这块内存地址,如果值是oldval则更新成newval。
思路:如果是期望值,则更新成新值,否则返回老值作为一下次循环的期望值。
java相关:
- java.util.concurrent.atomic implements
compareAndSetin 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/