簡體   English   中英

C ++ 11中shared_ptr的原子操作

[英]atomic operations for shared_ptr in C++11

通過閱讀c ++ 11 draft n3242 ,第20.7.2.5節,看起來我們在shared_ptr上有原子操作,這使我們能夠在復雜的結構上進行無鎖,而不必擔心GC /內存泄漏。

但是,我無法在GCC-4.7.0中成功使用它。 我只是測試了以下程序

#include <atomic>
#include <memory>
#include <string>

struct X {
    int x;
    double y;
    std::string s;
};

int main() {
    std::shared_ptr<X> x(new X);
    auto p = std::atomic_load(&x);
}

它有編譯錯誤:

c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’

有誰知道我在這里錯過了什么? 或者只是gcc還沒有實現呢?

有人建議棄用shared_ptr的這些atomic_store / atomic_load方法,以支持新的atomic_shared_ptr類: http//www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4162.pdf

所以當你得到一個帶有atomic_load的libstc ++版本時,它可能已經很好地包含了新的原子指針,這在幾個方面都更好。

MSVC STL不久前已經實現了這些方法,並且libc ++也聲稱完全符合C ++ 11/14,所以它們必須以最新版本提供。

看起來它還沒有在libstdc ++中。

它也不在libc ++中

VS11 beta有它。 我認為這是我在VS11的庫中找到的第一個不在libc ++中的東西。

使用clang ++和-std = c ++ 11來編譯應該使它工作的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM