我目前有麻煩正確理解新的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