• 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函数中的一段代码,仅仅被调用一次,代码前后还是会被多次调用!

  • 相关阅读:
    字符串匹配之BF算法
    python里的反射(自学习)
    python的super()以及父类继承
    @staticmethod
    @classmethod
    scrapy
    mongodb
    js注入提取伪元素选择器
    execjs
    base64解密
  • 原文地址:https://www.cnblogs.com/iuyy/p/13917892.html
Copyright © 2020-2023  润新知