atomic 内存序

本文探讨了如何使用atomic操作提升性能,并解释了内存序在多线程编程中的作用。通过示例展示了memory_order_release如何保证写操作的顺序,而memory_order_acquire则防止读操作的指令重排,确保正确性。然而,仅使用memory_order_release无法确保thread_read的正确执行,需要配合memory_order_acquire来确保线程安全。
摘要由CSDN通过智能技术生成

提高性能的一种方式  atomic 替换mutex

内存序跟原子操作本身并不冲突, 不论用那种内存序该原子还是原子操作

atomic内存序: 就是来指定顺序的

例子:

注 : 像类似 memory_order_relaxed 都是以函数为单位来重新排执行指令的 [这个注释后面再来看好了]
#include <atomic>
atomic<int> a (0);
atomic<int> b(0);
unsigned int __stdcall thread_write(void *ar){
    int hahah = 123;                             //1
    int balala = hahah;                         //2
    a.store(1,std::memory_order_relaxed);        //3
    b.store(666,std::memory_order_relaxed);        //4
    bool ooo = false;                         //7
    return 0;
}
unsigned int __stdcall thread_read(void * arg){

    while(b.load(std::memory_order_relaxed) != 666); //5
    int r = a.load(std::memory_order_relaxed);        //6
    cout << "a : " << r << endl;
    assert( r ==1 );

    return 0;
}
int m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值