多线程 std::call_once
转自:
std::call_once的特点:即使有多个线程要访问同一个函数,只有一个线程会成功。
std::call_once的用途:当某个数据只有在初始化的时候需要线程安全的时候,使用std::once是最安全和恰当的做法。
注意:std::once_flag的生命周期一定要长于std::call_once的线程的声明周期,所以一般把std::once_flag声明为全局变量。
例子:
#include <iostream> #include <thread> #include <mutex> std::once_flag flag; void do_once() { std::call_once(flag, [](){ std::cout << "called once" << std::endl; }); } int main() { std::thread t1(do_once); std::thread t2(do_once); std::thread t3(do_once); std::thread t4(do_once); t1.join(); t2.join(); t3.join(); t4.join(); }
执行结果:do_once()函数只被调用了一次。
c/c++ 学习互助qq群:877684253
本人微信:xiaoshitou5854
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/606436.html