zoukankan      html  css  js  c++  java
  • call_once/once_flag的使用

    为了保证在多线程环境下,某个代码段仅仅被调用一次,比如,初始化某个对象,而这个对象只能初始化一次,就可以用std::call_once来保证代码段在多线程环境下只被调用一次。

    使用std::call_once时候,需要一个once_flag作为call_once的参数:

    #include <iostream>
    #include <thread>
    #include <vector>
    #include <string>
    #include <mutex>
    #include <map>
    
    using namespace std;
    
    std::once_flag falg;
    
    void do_once(){
        std::cout << "Call Before!" << endl;
        std::call_once(falg,[](){std::cout << "Calling...!" << std::endl;});
        std::cout << "Call After!" << endl;
    }
    
    int main(){
        std::thread t1(do_once);
        std::thread t2(do_once);
        std::thread t3(do_once);
        t1.join();
        t2.join();
        t3.join();
        return 0;
    }

    注意:这里仅仅do_once函数中的一段代码,仅仅被调用一次,代码前后还是会被多次调用!

  • 相关阅读:
    164-268. 丢失的数字
    163-20. 有效的括号
    Sword 30
    Sword 29
    Sword 27
    Sword 25
    Sword 24
    Sword 22
    Sword 21
    Sword 18
  • 原文地址:https://www.cnblogs.com/iuyy/p/13917892.html
Copyright © 2011-2022 走看看