c/c++语言开发共享c/c++ 多线程 std::call_once

多线程 std::call_once 转自:https://blog.csdn.net/hengyunabc/article/details/33031465 std::call_once的特点:即使有多个线程要访问同一个函数,只有一个线程会成功。 std::call_once的用途:当某个数据只有 …


多线程 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

c/c++ 多线程 std::call_once

本人微信:xiaoshitou5854

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606436.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐