Is there a better way in c++ for one time execution of a set of code instead of using a static variable check

时间:2016-12-09 12:55:01

标签: c++11

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?.

2 个答案:

答案 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