C ++ 11等价的Java atomiclongarray的(c++ 11 equivalent

2019-10-16 20:28发布

我工作的一个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