C++:是否使用 IIFE 线程安全初始化静态局部变量?

Rai*_*ain 3 c++ lambda thread-safety iife

以下代码是线程安全的吗?(使用 IIFE 初始化静态局部变量。)

int MyFunc(){

static int Val = ([]()
   {
   return 1 + 2 + 3 + 4; // Real code is more complex, but thread-safe
   })();

return Val;

}
Run Code Online (Sandbox Code Playgroud)

Vit*_*meo 5

是的。C++11(及更高版本)保证在尝试初始化静态局部变量的多个线程之间没有数据竞争。如果 lambda 中的代码是线程安全的,则初始化也是如此。

使用 lambda、函数调用或构造函数不会改变初始化的线程安全性。