原子操作 std::atomic<int>

std::atomic<T>模板类可以使对象操作为原子操作,避免多线程竞争问题;请看如下代码,一目了然

原子操作:
可以把原子操作理解为一种:不需要用到互斥量加锁(无锁)技术的多线程编程方式
多线程中不会被打断的程序执行片段

互斥量:加锁一般针对一个代码段(几行代码)
原子操作:针对的一般都是一个变量,而不是一个代码段
一般指“不可分割的操作”
std::atomic来代表原子操作,std::atomic是个类模板。其实std::atomic这个东西是用来封装某个类型的值的

class Test
{
public:    
    Test() = default;
 
    void CThreadFunc()
    {
        for (int i = 0; i < 10000; ++i)
        {
            //std::lock_guard<std::mutex> lck(Test::m_s_ivalue_mutex); //m_iValue需要加锁才可正常工作
            m_iValue++;
 
            m_atomic_value++;//不加锁,也可正常工作
        }
    }
 
    void Start()
    {
        std::vector<std::thread> threads;
        for (int i = 0; i < 10; ++i)
        {
            threads.push_back(std::thread(&Test::CThreadFunc, this));
        }
 
        for (auto& th : threads)
        {
            if (th.joinable())
            {
                th.join();
            }
        }     
        std::cout << "m_iValue:" << m_iValue << ", m_atomic_value:" << m_atomic_value << std::endl;
    }
 
private:
    int m_iValue = 0;
    std::atomic<int> m_atomic_value = 0;//sta::atomic<T> 原子操作
    static std::mutex m_s_ivalue_mutex;
};

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::atomic<int>是C++中的原子类型,用于现原子操作。它是一个模板类,可以用于对int类型的变量进行原子操作。 通过使用std::atomic<int>,我们可以确保对int类型的变量进行线程安全的操作。这意味着多个线程可以同时访问和修改这个变量,而不会导致数据竞争或其他并发问题。 这个类提供了一系列的成员函数,比如load()、store()、exchange()等,可以用于读取和修改原子变量的值。此外,std::atomic<int>还支持一些特殊的操作,如compare_exchange_strong()和compare_exchange_weak(),可以用于实现更复杂的原子操作。 引用[2]中提到的std::atomic<std::shared_ptr>和std::atomic<std::weak_ptr>是C++20新增的特化版本,用于对shared_ptr和weak_ptr进行原子操作。这些特化版本的std::atomic类型提供了对共享指针和弱指针的原子操作支持,可以更方便地在多线程环境下使用这些智能指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [c++ 11 原子操作库 (std::atomic)(一)](https://blog.csdn.net/qq_40788199/article/details/126879524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值