In many places i have code for one time initialization as below
int callback_method(void * userData)
{
/* This piece of code should run one time only */
static int init_flag = 0;
if (0 == init_flag)
{
/* do initialization stuff here */
init_flag = 1;
}
/* Do regular stuff here */
return 0;
}
just now I started using c++11. Is there a better way to replace the one time code with c++11 lambda or std::once functionality or any thing else?.
答案 0 :(得分:3)
您可以将操作封装到静态函数调用中,或者使用立即调用的函数表达式和C ++ 11 lambdas:
int action() { /*...*/ }
...
static int temp = action();
和
static auto temp = [](){ /*...*/ }();
分别
是的,最常见的解决方案是使用std::call_once
,但有时它有点矫枉过正(你应该使用特殊标志,返回初始问题)。
使用C ++ 11标准,所有这些方法都是线程安全的(变量将初始化一次并“原子地”),但如果此处使用了一些共享资源,您仍必须避免action
内的竞赛。
答案 1 :(得分:1)
Yes - std::call_once
, see the docs on how to use this: http://en.cppreference.com/w/cpp/thread/call_once