zoukankan      html  css  js  c++  java
  • memory_order_consume

    #include <thread>
    #include <atomic>
    #include <cassert>
    #include <string>
     
    std::atomic<std::string*> ptr;
    int data;
     
    void producer()
    {
        std::string* p  = new std::string("Hello");
        data = 42;
        ptr.store(p, std::memory_order_release);
    }
     
    void consumer()
    {
        std::string* p2;
        while (!(p2 = ptr.load(std::memory_order_consume)))
            ;
        assert(*p2 == "Hello"); // never fires: *p2 carries dependency from ptr
        assert(data == 42); // may or may not fire: data does not carry dependency from ptr
    }
     
    int main()
    {
        std::thread t1(producer);
        std::thread t2(consumer);
        t1.join(); t2.join();
    }
    

      

  • 相关阅读:
    反射:框架设计的灵魂
    Junit测试
    XML笔记
    map 的用法
    opencv总结1
    光源
    镜面反射
    openGL纹理对象
    GPU入门
    动态规划1
  • 原文地址:https://www.cnblogs.com/youge-OneSQL/p/12287452.html
Copyright © 2011-2022 走看看