java and C++11 volatile

java and C++11 volatile

本文关键字:volatile C++11 and java      更新时间:2023-10-16

我想将一些代码从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_strongfetch_add)的支持。