无锁编程:lock-free原理;CAS;ABA问题

本文探讨了多线程环境下,使用CAS操作时可能出现的ABA问题。通过实例说明,当一个线程对变量进行两次修改,第二次修改后的值与第一次修改前的值相同时,可能导致其他线程无法察觉变量已被修改的问题。文章提出了通过添加额外的“tag”或“stamp”位来标记变量是否被修改过的解决方案。

转 https://blog.csdn.net/linuxheik/article/details/76005374

 

ABA问题

在多线程环境中,使用lock-free的CAS时,如果一个线程对变量修改2次,第2次修改后的值和第1次修改前的值相同,那么可能就会出现ABA问题。以上面的例子为例: 
假设有两个线程P1和P2,P1执行完int oldval=val后被其他线程抢占。P2线程在此期间修改了val的值(可能多次修改),但最终val的值和修改前一样。当P1线程之后运行CAS函数时,并不能发现这个问题。这就是ABA问题。

解决方法

一个常用的方法是添加额外的“tag”或“stamp”位来标记是指针是否被修改过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值