线程之间共享的变量的声明

Vla*_*nin 4 c++ multithreading

相当常见的面试问题:如何在C++中声明一个由不同线程使用的变量?(或类似的东西).我以为'volatile int x;' 是答案,但我从一些评论中看到这是不正确的.我对两者都感兴趣:

  • 什么是正确的答案
  • 为什么volatile在过去被认为是正确的(?)而不是现在..

Mik*_*our 5

什么是正确的答案

std::atomic<int> x;
Run Code Online (Sandbox Code Playgroud)

为什么volatile在过去被认为是正确的(?)而不是现在

根据C++标准,它永远不会正确.在C++ 11之前,标准根本没有提到线程; C++ 11通过添加原子类型(和原语类似std::mutex)来支持同步,而不是通过更改volatile其他现有语言功能的含义.

一个流行的编译器决定volatile应该使访问跨线程同步,以及它的标准含义.其他编译器不提供该扩展,因此它不是您可以依赖的东西.

  • 那是哪个编译器? (3认同)