【问题标题】:C++: Is initializing a static local variable with a IIFE thread-safe?C++:使用 IIFE 线程安全初始化静态局部变量吗?
【发布时间】:2019-11-15 02:50:05
【问题描述】:

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

int MyFunc(){

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

return Val;

}

【问题讨论】:

  • 非常相似的question,可能是重复的。

标签: c++ lambda thread-safety iife


【解决方案1】:

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

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

【讨论】:

  • If the code inside your lambda is thread-safe 是什么意思——不应该只从第一个到达初始化器的线程调用 lambda 吗?
  • @AndreHolzner 正确,但是 lambda 中的代码可能会调用例如不可重入的函数,并且在其他地方同时调用这些函数。
猜你喜欢
  • 1970-01-01
  • 2017-03-16
  • 2011-12-27
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多