Linux中的atomic_t

时间:2016-01-12 15:24:29

标签: c linux kernel system

我正在研究Robert Love的Linux内核开发Linux内核。

如您所知,本书使用旧版本的Linux。它是2.6版本

atomic_t有" volatile int counter"。但是新的Linux版本的atomic_t有" int counter"不易变。为什么这种挥发性已经消失了?

1 个答案:

答案 0 :(得分:7)

因为volatile变量不是原子变量。使用volatile的唯一要点是防止可能的编译器优化,这与防止不需要的并发访问不同。

在这方面,使用volatile几乎是不正确的。

您可以在Semantics and Behavior of Atomic and Bitmask Operations中了解更多相关信息。

引用其中的一小部分:

  

*警告:atomic_read()和atomic_set()不要暗示障碍! *

     

某些架构可能会选择使用volatile关键字,障碍或内联   汇编以保证atomic_read()和。的一定程度的即时性   atomic_set()。这不是一致的保证,将来可能会改变,   所以atomic_t的所有用户都应该将atomic_read()和atomic_set()视为简单   C语句可以完全由编译器重新排序或优化   或处理器,并显式调用适当的编译器和/或内存   每个用例的障碍。如果不这样做,将导致代码可能   与不同的架构或编译器一起使用时突然中断   优化,甚至是无关代码的变化,这些变化如何变化   编译器优化访问atomic_t变量的部分。

     

*您已被警告过! *