Foo*_* R. 4 c java multithreading pthreads volatile
我知道volatile在Java 中的使用.那是(基于维基百科的文章):
对volatile变量的读写有一个全局排序.这意味着访问volatile字段的每个线程将在继续之前读取其当前值,而不是(可能)使用缓存值.
我也知道volatile在C中存在关键字但是在完全不同的上下文中,主要用于内存映射的I/O.
所以我想知道,volatile在C中是否有类似Java的构造?哪个会阻止读取变量的缓存值?
如果在C中不存在,是否有一个具有这种结构的库,比如pthread?
volatile在C中基本上是一个时代错误,用于完全不同的场景,并不适用于多线程编程.由于某些原因,即使是最新的c ++标准也无法赋予它更多的意义,但却不得不发明一个新的关键字.
请注意,这意味着volatileC标准定义没用,编译器可能会给你额外的保证(我知道MS VC可以做到并且我认为它提供了与java中volatile相同的保证),但这意味着程序被锁定为一个编译器.大多数编译器也有一些内在函数来插入内存屏障,这有点更明确,但本身又不可移植.
在实践中,您可能最好使用一些更高级别的线程库,为工作提供合适的工具.例如,POSIX为您提供低级内存屏障.
在c ++站点上,自0x11以来它更好 - 标准确实提供了std::atomic_thread_fence原子变量.不过要注意的是,C++为0x11的内存模型是不相同的java的一个,所以你必须移植时要小心.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |