因为volatile变量不是原子变量.使用的唯一方法volatile是防止可能的编译器优化,这与防止不必要的并发访问不同.
在这方面,使用volatile几乎永远不正确.
您可以在原子和位掩码操作的语义和行为中阅读更多相关信息.
引用其中的一小部分:
*警告:atomic_read()和atomic_set()不要暗示障碍!*
某些体系结构可能会选择使用volatile关键字,障碍或内联汇编来保证atomic_read()和atomic_set()的某种程度的即时性.这不是一致的保证,并且可能在将来发生变化,因此atomic_t的所有用户都应将atomic_read()和atomic_set()视为可以完全由编译器或处理器重新排序或优化的简单C语句,并显式调用相应的每个用例的编译器和/或内存屏障.如果不这样做,将导致代码在与不同的体系结构或编译器优化一起使用时可能突然中断,甚至会导致无关代码的更改,从而改变编译器优化访问atomic_t变量的部分的方式.
*你被警告了!*
| 归档时间: |
|
| 查看次数: |
10126 次 |
| 最近记录: |