[英]atomic_t in Linux
我正在研究Robert Love的Linux内核开发Linux内核。
如您所知,本书使用旧版Linux。 它是2.6版本
atomic_t有“volatile int counter”。 但是新Linux版本的atomic_t的“int counter”并不易变。 为什么这种挥发性已经消失了?
因为volatile变量不是原子变量。 使用volatile
的唯一要点是防止可能的编译器优化,这与防止不需要的并发访问不同。
在这方面, volatile
的使用几乎从不正确。
您可以在原子和位掩码操作的语义和行为中阅读更多相关信息。
引用其中的一小部分:
*警告:atomic_read()和atomic_set()不要暗示障碍! *
某些体系结构可能会选择使用volatile关键字,障碍或内联汇编来保证atomic_read()和atomic_set()的某种程度的即时性。 这不是一致的保证,并且可能在将来发生变化,因此atomic_t的所有用户都应将atomic_read()和atomic_set()视为可以完全由编译器或处理器重新排序或优化的简单C语句,并显式调用相应的每个用例的编译器和/或内存屏障。 如果不这样做,将导致代码在与不同的体系结构或编译器优化一起使用时可能突然中断,甚至会导致无关代码的更改,从而改变编译器优化访问atomic_t变量的部分的方式。
* 你被警告了! *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.