我目前有麻烦正确理解新的std::atomic
类型的用法。对于我来说,我有以下假设:C++ 11 std :: atomic_fetch_add vs __sync_fetch_and_add
- 我存储在内存中
- 我有两种
uint64_t
值的连续内存位置访问简单的增量和原子增量
本来我实现这样
uint64_t inc(const size_t pos) { return _data[pos]++; }
uint64_t atomic_inc(const size_t pos) { return __sync_fetch_and_add(&_data[pos], 1); }
方法现在,我想这个端口正确地C++ 11,想知道我应该如何处理这个科尔ectly。根据我对std::atomic_fetch_add的理解,基本上需要一个原子积分值来做到这一点。然而,我需要如何正确实现这一点,以便我可以将一个原子变量指向一个位置并递增该值?
谢谢!
你可能对你的问题更精确一点吗?你可以像普通的int那样对待一个'std :: atomic',甚至操作符对于正常的使用情况都是重载的。 – inf 2013-02-13 17:21:44
我有点困惑,你想_data是一个正常的uint64和pos是原子变量或两者都是原子?我在这里举了一个简单的例子http://ideone.com/7RqlwP。正如bamboon所说的,你可以正常和原子地增加原子变量。 – 2013-02-13 17:36:45
你必须跳过额外的箍来获得非原子增量。重载运算符等价于相应的'atomic_fetch_ * op *'调用 – JoergB 2013-02-13 17:59:08