首页 > 其他 > 详细

Lock Free (无锁并发)

时间:2019-07-06 10:23:07      阅读:113      评论:0      收藏:0      [点我收藏+]

CAS( compare and swap) 原子操作,保证了如果需要更新的地址没有被其他进程(线程)改动过,那么它可以安全的写入。而这也是我们对于某个数据或者数据结构加锁要保护的内容,保证读写的一致性,不出现dirty data。在用户可在循环中不断执行CAS,如果共享变量没有改变,那么swap,在当前环境中写入,否则执行do-while的Retry-Loop。

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

ABA问题最容易发生在lock free算法中的,地址被重用的情况

无锁相当于“锁”的粒度变小了,主要是“锁”HEAD和TAIL这两个关键资源。而不是整个数据结构。

参考博客: 

gaochundong

coolshell

IBM developer

Lock Free (无锁并发)

原文:https://www.cnblogs.com/demian/p/11141733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!