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

标签 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;

}

最佳答案

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

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

关于C++:是否使用 IIFE 线程安全初始化静态局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869660/

相关文章:

c++ - Visual Studio 2005 中的 Lambda 函数替代品——Boost 库

返回 boolean 值的 Java 10 ifPresentOrElse

c# - 这个例子线程安全吗?

c++ - 输入迭代器的示例,其中 `end()` 实际上表示最后一次?

c++ - Visual C++ 2010 是否支持 C++11 线程库?

c++ - 在模板类中编写的 lambda 函数不支持 restrict(...) 吗?

mysql - 使用表来保存 Web 服务器场中最后使用的 ID

java - 调用同步的 getter 和 setter

c++ - 编译器说通过变量未声明

c++ - 如何使用 C++ 应用程序运行控制台