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

问题描述 投票:2回答:1

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

int MyFunc(){

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

return Val;

}
c++ lambda thread-safety iife
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.