深圳企业做网站公司哪家好,二级网页制作教程,jquery+html5 网站后台管理页面模板,seo优化团队在某些特定情况下#xff0c;某些函数只能在多线程环境下调用一次#xff0c;比如#xff1a;要初始化某个对象#xff0c;而这个对象只能被初始化一次#xff0c;就可以使用std::call_once()来保证函数在多线程环境下只能被调用一次。使用call_once()的时候#xff0c;需…在某些特定情况下某些函数只能在多线程环境下调用一次比如要初始化某个对象而这个对象只能被初始化一次就可以使用std::call_once()来保证函数在多线程环境下只能被调用一次。使用call_once()的时候需要一个once_flag作为call_once()的传入参数该函数的原型如下
// 定义于头文件 mutex
template class Callable, class... Args
void call_once( std::once_flag flag, Callable f, Args... args );flagonce_flag类型的对象要保证这个对象能够被多个线程同时访问到f回调函数可以传递一个有名函数地址也可以指定一个匿名函数args作为实参传递给回调函数
多线程操作过程中std::call_once()内部的回调函数只会被执行一次示例代码如下
#include iostream
#include thread
#include mutex
using namespace std;once_flag g_flag;
void do_once(int a, string b)
{cout name: b , age: a endl;
}void do_something(int age, string name)
{static int num 1;call_once(g_flag, do_once, 19, luffy);cout do_something() function num num endl;
}int main()
{thread t1(do_something, 20, ace);thread t2(do_something, 20, sabo);thread t3(do_something, 19, luffy);t1.join();t2.join();t3.join();return 0;
}do_once函数只被调用了一次