gpt4 book ai didi

c++ - 如何使用原子指针执行双缓冲?

转载 作者:IT老高 更新时间:2023-10-28 23:18:16 24 4
gpt4 key购买 nike

这里是原子新手。我的代码目前看起来像这样(简化):

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) 中所做的那样?

最佳答案

使用 load() 获取指针将是原子的,但对 doSomething() 的调用本身将不是原子的。

这意味着可以在调用 load() 之后但在调用 doSomething() 之前交换指针(这意味着 doSomething()调用了错误且现已删除的对象)。

也许在这里使用互斥锁可能是更好的选择?

关于c++ - 如何使用原子指针执行双缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com