• c++ 多线程笔记4


    参考来源:ttps://baptiste-wicht.com/posts/2012/07/c11-concurrency-tutorial-part-4-atomic-type.html

    本文介绍c++并发库中的原子类型: Atomic types.

    1. Atomic Types

    struct Counter {
        int value;
        
        void increment(){
            ++value;
        }
        
        void decrement(){
            --value;
        }
        
        int get(){
            return value
        }
    };

    我们可以看到这个类在多线程环境中使用不是很安全。我们可以使用互斥锁来使得这个类的安全。

    将介绍原子类型。原子类型的主要的优势是它的操作,这个std::atomic操作的执行无需锁操作并且比锁操作更快。

    C++11并发库将原子类型作为一个模板类 std::atomic。你可以用模板实现任何你想要的类型,实现原子操作和线程安全。

    主要函数std::atomic提供的是store和load函数,能够实现原子设置和得到std::atomic的内容。

    另一个有趣的函数是exchange,能够给atomic设置一个新的值并且返回atomic的之前的值。

    最后,还有两个函数compare_exchange_weak和compare_exchange_strong能够在这个值和提供的期望值相等时执行原子交换。

    最后这两个函数在无锁算法中能被执行。

    std::atomic时专门为所有的整数类型提供成员函数。

    很容易使得Counter类安全使用std::atomic。

    #include <atomic>
    
    struct AtomicCounter {
        std::atomic<int> value;
    
        void increment(){
            ++value;
        }
    
        void decrement(){
            --value;
        }
    
        int get(){
            return value.load();
        }
    };

    建议在需要的时候使用std::atomic去做原子操作,尤其在对整数类型做处理时。

    The Safest Way to Get what you Want is to Try and Deserve What you Want.
  • 相关阅读:
    python函数
    python文件IO操作
    LAMP项目上线
    linux下的小工具
    linux下自有服务
    Lesson_Swift2
    枚举
    使用文件流下载附件
    Global中的Timer计时器
    IE11下的NPOI导出提示__doPostBack未定义解决方案
  • 原文地址:https://www.cnblogs.com/Shinered/p/9084960.html
Copyright © 2020-2023  润新知