Атомный новичок здесь. Мой код в настоящее время выглядит так (упрощенно):
std::atomic<Object*> object;
void thread_a()
{
object.load()->doSomething(); // (1)
}
void thread_b()
{
Object* oldObject = object.load();
Object* newObject = new Object();
// Update new object accordingly...
while (!object.compare_exchange_weak(oldObject, newObject));
delete oldObject;
}
Словом, моя идея состоит в том, чтобы позволить thread_b атомарно поменять общий объект (двойная буферизация), в то время как thread_a выполняет с ним некоторую работу. Мой вопрос: могу ли я предположить, что общий объект будет "защищен" от гонок данных, в то время как thread_a вызывает для него doSomething(), как это сделано в (1)?