【发布时间】:2010-11-12 20:20:59
【问题描述】:
我看过这句话:
一般规则是,如果您有 必须的原始类型变量 在多个线程之间共享, 声明这些变量 易变
来自this article,还有这句话:
一般来说,任何可能的数据 不带日期的异步应该是 声明为 volatile。
来自this page,现在考虑到这个引入的规则,我想知道你能否举一个例子,尽管存在对数据的异步访问,但声明数据易失性在实践中没有用,或者没有这样的例外case 和规则是严格的。
【问题讨论】:
-
@sbi: 另请参阅我对 Alexandrescu 使用
volatile的看法。总而言之:它与异步访问或内存栅栏无关,它与让编译器捕获您可能搞砸的地方有关一切。就像您尝试为const变量赋值一样。 -
我还在stackoverflow.com/questions/4136900/…的回复中添加了详细说明
-
@Pooria:这是你的总结:Pooria:“
volatile是否必须在多线程中使用?”其他人:“volatile与多线程无关”Pooria:“我问的不是多线程” -
@John Dibling_我问的是多线程,但不是你想的同步对内存的访问。
-
我的理解是,将某些东西声明为 volatile 只会告诉编译器不要缓存它的值,因为它可能会在其他地方更改。它并没有告诉编译器不要重新排序代码,这就是这里的根本问题。所以声明为 volatile 可能 是必要的,但仅靠它来实现线程安全是不够的。在实践中,由于编译器的实现方式,它可能会起作用——但这可能还不是一个足够好的保证!对吗?
标签: c++ multithreading rules volatile