Атомный новичок здесь. Мой код в настоящее время выглядит так (упрощенно):
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)?