首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ 11与java atomiclongarray的等价物

c++ 11与java atomiclongarray的等价物
EN

Stack Overflow用户
提问于 2012-06-14 00:51:22
回答 2查看 682关注 0票数 1

我正在开发一个Java库的C++端口。其中一个问题是我找不到与Java的AtomicLongArray相当的东西。有谁知道c++ 11中是否已经有了类似的功能,或者如何实现类似的功能?我看了看C++11原子,但什么也没找到。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-14 00:54:37

AtomicLongArray的文档中写道:

一个长数组,其中的元素可以自动更新。有关原子变量属性的说明,请参阅java.util.concurrent.atomic包规范。

对我来说,这听起来像是一个简单的std::atomic<long>数组

代码语言:javascript
复制
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

票数 8
EN

Stack Overflow用户

发布于 2012-06-14 02:15:14

在container.requirements.dataraces中,标准说

-2-尽管如此(17.6.5.9),当同时修改同一序列中不同元素中包含的对象的内容( vector<bool>除外)时,需要实现以避免数据竞争。

-3- [注意:对于大于1的vector<int> x,可以同时执行x[1] = 5*x.begin() = 10而不会有数据竞争,但同时执行x[0] = 5*x.begin() = 10可能会导致数据竞争。作为一般规则的例外,因为vector<bool> y, y[0] = true可以与y[1] = true竞争。-end备注]

因此,任何容器(除了邪恶的vector<bool>)都允许在没有数据竞争的情况下更新单独的元素。为了确保对单个元素的更新是安全的,请使用原子类型的容器,例如std::vector<std::atomic<long>>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11019615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档