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

被折叠的 条评论
为什么被折叠?



