при чтении C++ 11 проекта n3242, раздел 20.7.2.5, похоже, у нас есть атомарные операции на shared_ptr, что позволяет нам сделать замок свободного от сложной структуры, не заботясь о GC /утечка памяти.атомарных операций для shared_ptr в C++ 11
Однако я не смог использовать его в 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_load' точно ..? – ildjarn
@ildjarn, прочтите это http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2674.htm –
@ildjarn Если потоки меняют то, что указывает переменная shared_ptr, вам нужно избегать когда вы получаете доступ к самому shared_ptr. – bames53