第十六课:C++多线程CAS与ABA的问题

本文详细解释了CAS(CompareandSwap)原子操作原理,以及ABA问题的出现场景,涉及线程间对共享内存的并发修改导致的数据不一致。讨论了结合内存分析ABA问题的实例,强调了内存管理在多线程环境中的重要性。
摘要由CSDN通过智能技术生成
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值