我工作的一个Java库的C ++端口上。 其中一个问题是我不能够找到Java的AtomicLongArray的等价物。 任何人都知道,如果有什么已经在C ++ 11或如何实现类似的功能等同? 我看了一下C ++ 11个原子公司,但找不到任何东西。
Answer 1:
对于文档AtomicLongArray说:
长阵列,其中的元件可以用原子方式更新。 看到
java.util.concurrent.atomic
原子变量的属性的描述包规范。
这听起来好像一个简单的阵列std::atomic<long>
:
std::array<std::atomic<long>, N> array;
// or, if size is not known at compile time
std::vector<std::atomic<long>> vector(n);
请注意,只有元素是原子,容器本身是没有的,所以不要去走一走push_back
荷兰国际集团到载体。
Answer 2:
在[container.requirements.dataraces]标准说
尽管-2-(17.6.5.9),需要实现,以避免数据的比赛时,在同一序列的不同元件所包含的对象,除了内容
vector<bool>
,被同时修改。-3- [ 注意:对于
vector<int> x
的尺寸大于一,x[1] = 5
和*x.begin() = 10
可以在没有数据争用同时执行,但x[0] = 5
和*x.begin() = 10
同时执行,可能会导致数据的比赛。 作为例外的一般规则,对一个vector<bool> y, y[0] = true
可以与比赛y[1] = true
。 末端注 ]
因此,任何容器(除恶vector<bool>
)允许在不数据争要被更新的单独元件。 也确保更新单个元件是安全的,使用的原子类型的容器,例如std::vector<std::atomic<long>>
文章来源: c++ 11 equivalent of java atomiclongarray