java and C++11 volatile
java and C++11 volatile
我想将一些代码从Java移植到C++11,但我对volatile关键字有点困惑。
我不熟悉Java语言,也不知道volatile变量是什么。它保证每个线程都能访问变量的最新值——这是C++的volatile行为。但它通常用于同步-所有操作都是在volatile变量atomic上执行的吗?
因此,我认为C++11对Java volatile的良好替代将是std::atomic。或者我完全错了,因为我错过了一些额外的Java易失性功能?
是的,他们会很匹配,多布斯博士有一篇关于这方面的好文章。
简而言之,有序的原子变量可以安全地进行读取和写入在不执行任何显式锁定的情况下同时执行多个线程因为它们提供了两个保证:它们的读写保证按照程序中出现的顺序执行源代码;并且保证每次读取或写入是原子的,要么全有要么全无。
Java提供这种类型的变量作为volatile
,C++作为std::atomic
。
这个页面对Java的volatile
关键字有一个很好的解释:http://www.javamex.com/tutorials/synchronization_volatile.shtml.在我看来,基元类型(例如,整数)上的C++11std::atomic<>
确实是一个很好的替代。注意,std::atomic<>
提供对读-修改-写操作(例如,compare_exchange_strong
和fetch_add
)的支持。
相关文章:
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何将模板转换为C++11之前的模板
- 在一个读写器队列中,我可以用volatile替换原子吗
- c++11评估顺序(未定义的行为)
- C++中的VLA,扩展名为std=C++11
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- "类模板示例<int>;"语句对 C++11 是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何使用lock_guard在c++11中实现scoped_lock功能
- C++11 中不同类型的对象的 std::array 的替代方案
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- C++11是否允许(不要求)volatile关键字的发布/获取语义
- java and C++11 volatile
- C++11:对const、volatile、左值引用和右值引用限定的成员函数指针进行抽象