c++ - 线程上下文的静态存储对象优化

标签 c++ multithreading c++11 storage-duration

编译器能否在多线程程序上下文中优化静态存储对象?例如,我要求它知道声明为静态的变量在线程中调用的函数中使用时是否会产生副作用。

bool flag = false; // static storage duration object

void f(){ //function called in a thread
  flag = false;
  // do some work...
  flag = true;
}

//a possible representation of the code above after optimization
void f(){
  flag = true;
  // do some work...
} // is this possible to happen?

我从here读了一些答案,但我没有找到任何有帮助的东西。

最佳答案

静态存储持续时间对线程安全没有影响。在您的示例中,只要重新排序不会破坏 f 中的任何内容,第二个代码块就是合法的。 .

您仍然需要对任何线程写入的所有共享对象进行同步。在这种情况下,您可以通过使用 std::atomic<bool> 来获得它。对于 flag喜欢

std::atomic<bool> flag = false;

线程安全的规则是,如果你有一个在多个线程之间共享的对象,并且至少其中一个是写入者,那么你就需要同步。如果你不这样做,那么你就会发生数据竞争,这是未定义的行为。

关于c++ - 线程上下文的静态存储对象优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56657046/

相关文章:

c++ - 二维点的排列

c# - 关于从线程访问表单的开销的问题

c++ - 无法理解功能简写

c++ - 为 Windows 10/8 x64 创建应用程序需要哪些 qt 组件?

C++:编译器能否优化按值传递?

c++ - mfc c++ 将带有 postmessage 的自定义用户消息从工作线程发送到主 ui 线程

c# - 无法终止 Silverlight 中的工作线程

c++ - 为什么在抛出 'range error' what()实例后调用终止: 'Range Error' -1

c++ - Primer 显示错误,但代码在 GCC 上运行良好

c++ - 如何在 C++ 中实现多维映射的常量正确性