C++:使用 IIFE 线程安全初始化静态局部变量吗?
C++: Is initializing a static local variable with a IIFE thread-safe?
下面的代码是线程安全的吗? (使用 IIFE 初始化静态局部变量。)
int MyFunc(){
static int Val = ([]()
{
return 1 + 2 + 3 + 4; // Real code is more complex, but thread-safe
})();
return Val;
}
是的。 C++11(及更高版本)保证尝试初始化静态局部变量的多个线程之间不会发生数据竞争。如果 lambda 中的代码是线程安全的,那么初始化也是如此。
使用 lambda、函数调用或构造函数不会改变初始化的线程安全性。
下面的代码是线程安全的吗? (使用 IIFE 初始化静态局部变量。)
int MyFunc(){
static int Val = ([]()
{
return 1 + 2 + 3 + 4; // Real code is more complex, but thread-safe
})();
return Val;
}
是的。 C++11(及更高版本)保证尝试初始化静态局部变量的多个线程之间不会发生数据竞争。如果 lambda 中的代码是线程安全的,那么初始化也是如此。
使用 lambda、函数调用或构造函数不会改变初始化的线程安全性。