Я хочу использовать std::shared_ptr в сценарии чтения/записи. Один поток постоянно получает новую информацию и хранит интеллектуальный указатель на последние данные. Когда приходит время запустить мой медленный расчет, я беру интеллектуальный указатель на все данные, чтобы убедиться, что я смотрю на согласованные данные. В приведенном ниже примере, когда я использую a, а затем b, я знаю, что они принадлежат друг другу.
Я не уверен, следует ли мне использовать здесь atomic_load и atomic_store? Мне все равно, на какую версию Foo я смотрю, пока она непротиворечива и действительна.
Итак, должен ли я использовать atomic здесь для своих интеллектуальных указателей, чтобы этот код работал из двух разных потоков?
Спасибо,
Павел
#include <iostream>
#include <memory>
class Foo{
public:
int a;
int b;
};
class MyClass{
public:
std::shared_ptr <Foo> lastValue;
void realTimeUpdate (Foo* latest) { //takes ownership of Foo
lastValue=std::shared_ptr <Foo> (latest); //Is this OK to do without using std::atomic_?
};
void doSlowCalcFromAnotherThread () {
//take a reference to all input data
std::shared_ptr <Foo> stableValue=lastValue; //Is this OK to do without using std::atomic_
//display a and b guaranteed that they come from the same message
std::cout<<"a: "<<stableValue->a<<std::endl;
std::cout<<"b: "<<stableValue->b<<std::endl;
};
};
std::mutex
для защиты доступа к указателю и называть это днем. Назначениеstd::shared_ptr
не является атомарным. - person Alexandre C.   schedule 05.04.2016