内存序 memory_order consume acquire release

记录

有一个项目里乱用 atomic 内存序 , 全部用了  memory_order_relaxed, 都不知道是怎么测过的.

 

memory_order_acquire  -  release  :  

1.至少2个线程需要对这个变量操作 

2.假设A线程release , B线程acquire , 此时将进行同步, B线程acquire 确保是A线程release的值是最新的.

3.还有个作用, B线程acuqire后, A线程release之前的写操作都已经完成.

总结 release 的作用 : 在release 之前的变量都同步了

伪代码例子:

//只注意 k 变量即可


void thread_A() {
    a.store(1, relaxed);
    b.store(1, relaxed);
    c.store(1, relaxed);


    //**********注意 , a,b,c 在relase 一定是完成的
     k.store(true, release);

    
}


void thread_B() {

    ...


    // 直到 A 线程的  k.store(true, release) 退出循环
    while( ! k.load(acquire) ) 
    
    // 这里可以保证 a, b, c 3个变量都已经写完
    // 可以用assert 验证一下

    
}

 

 

 

memory_order_consume - release :  这个好像我自己用的比较多一些

1.也是在至少2个线程需要对这个变量操作

2.上面的 acquire - release , release 在执行的时候会把他之前的操作都完成了. 但此时我根本不关心release之前的那些变量, 另一个线程根本用不着 ; 此时就可以使用 consume - release;

3.相对于 acq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值