Подтвердить что ты не робот

Атомные операции для shared_ptr в С++ 11

Читая проект С++ 11 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 еще не реализовано?

4b9b3361

Ответ 1

Есть предложение отказаться от этих методов atomic_store/atomic_load для shared_ptr в пользу нового класса atomic_shared_ptr: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4162.pdf

Итак, к тому времени, когда вы получите версию libstС++ с atomic_load, она вполне может содержать новые атомарные указатели, которые лучше в нескольких аспектах.

MSVC STL недавно применил эти методы, а libС++ также требует полного соответствия С++ 11/14, поэтому они должны быть доступны в последних версиях.

Ответ 2

Похоже, это еще не в libstdС++.

Это также не в libС++

VS11 beta имеет его. Я думаю, что это первое, что я нашел в библиотеке VS11, которая не была в libС++.

Ответ 3

Используйте clang++ с -std = С++ 11 для компиляции кода, который должен заставить его работать.