我知道使用volatile
在爪哇。
即(基于维基百科文章 http://en.wikipedia.org/wiki/Volatile_variable):
对易失性对象的读取和写入存在全局顺序
多变的。这意味着每个访问易失性字段的线程
将在继续之前读取其当前值,而不是
(可能)使用缓存值。
我也知道存在volatile
C 中的关键字,但在完全不同的上下文中,主要用于内存映射 I/O。
所以我想知道是否有像Java这样的构造volatile
在C语言中?这将阻止
读取变量的缓存值?
如果它在 C 中不存在,是否可能有一个具有这种结构的库,例如pthread
?
volatile
在 C 中基本上是一个不合时宜的情况,旨在用于完全不同的场景,并且对于多线程编程没有用处。由于某些原因,即使是最新的 C++ 标准也无法赋予它更多含义,而不得不发明一个新的关键字。
请注意,这意味着volatile
正如 C 标准所定义的那样,编译器可能会为您提供额外的保证(我知道 MS VC 确实如此,并且我认为它提供的保证与 java 中的 volatile 基本相同),但这意味着程序被锁定到该编译器。大多数编译器还具有一些用于插入内存屏障的内在函数,这更加明确,但本身又不可移植。
在实践中,您可能最好使用一些更高级别的线程库,它为工作提供了正确的工具。例如。 POSIX 为您提供了低级别的内存障碍。
在 C++ 网站上,自 0x11 以来它更好 - 标准确实提供std::atomic_thread_fence
和原子变量。请注意,c++0x11 内存模型是NOT与 java 相同,因此移植时必须小心。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)