Ign*_*ant 12 c++ multithreading atomic
原子新手在这里.我的代码目前看起来像这样(简化):
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;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我的想法是让thread_b原子交换共享对象(双缓冲),同时thread_a对它执行一些工作.我的问题:我可以安全地假设共享对象在对其进行thread_a调用doSomething()时会受到"保护" ,如(1)中所做的那样吗?
获取指针load()将是原子的,但对doSomething()自身的调用将不是原子的.
这意味着指针可以在load()调用之后但在调用之前进行交换doSomething()(这意味着doSomething()在错误且现在删除的对象上调用).
也许互斥可能是更好的选择?