callonce/one_flag

2018-07-17  本文已影响0人  _gentle

如果要保证某个函数在多线程的环境下只被调用一次,可以使用callonce,一个典型的场景就是初始化。callonce需要once_flag作为入参。使用时需要包含头文件<mutex>

#include<iostream>
#include<thread> 
#include<mutex>

std::once_flag flag;
std::once_flag flag2;
void f() {
    std::cout << "call once" << std::endl;
}
void do_once() {
    std::call_once(flag, f); 
    std::call_once(flag2, f); 
}

int main() {
    //error std::call_once不可作为参数 
    //std::thread t1(std::call_once(flag, []{std::cout << "call once" << std::endl;}));
    std::thread t1(do_once);
    std::thread t2(do_once);
    t1.join();
    t2.join();
}

其输出为

call once
call once

上一篇 下一篇

猜你喜欢

热点阅读