#include<thread>
#include<iostream>
using namespace std;
using namespace this_thread;
int main()
{
/*
CAS与ABA的问题
1,怎么是CAS?
->原子操作实现根本
->CAS基本形式(addr,oldValue,newValue)
->当地址addr存放的值是oldValue,用这个newValue替换
2,ABA问题
->简单版本:ABA操作
->线程1从内存V中读取出A
->线程2从内存V中读取出A
->线程2往内存V写入B
->线程2 A写入内存V中
->线程1进行CAS操作 V中依旧是A 操作成功
虽然CAS操作没有问题,但是线程2对于数据的操作已经丢失
3,结合内存来分析ABA问题
->线程1 从内存V中读取出A,A是指向W内存
->线程2 从内存V中读取出A
->线程2 做了一些操作后,一不小心,做了释放操作
->线程2 给A重新申请内存,重新申请内存也是指向W内存
->线程2 在把内存写到V当中
->线程1 CAS操作,A依旧是指向W,操作还是成功
如果线程2只是释放了A指向的内存,线程1在CAS之前还要访问A中内容,线程1访问是一个野指针
*/
return 0;
}
第十六课:C++多线程CAS与ABA的问题
最新推荐文章于 2024-08-12 09:09:22 发布
本文详细解释了CAS(CompareandSwap)原子操作原理,以及ABA问题的出现场景,涉及线程间对共享内存的并发修改导致的数据不一致。讨论了结合内存分析ABA问题的实例,强调了内存管理在多线程环境中的重要性。
摘要由CSDN通过智能技术生成