gpt4 book ai didi

在 boost::shared_ptr operator bool() 上旋转时需要 C++ volatile?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:21 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
When to use volatile with multi threading?

我有两个线程引用相同的boost::shared_ptr:

boost::shared_ptr<Widget> shared;

On 线程正在旋转,等待另一个线程重置 boost::shared_ptr:

while(shared)
boost::thread::yield();

在某个时刻另一个线程会调用:

shared.reset();

我的问题是我是否需要将共享指针声明为 volatile 以防止编译器优化对 shared.operator bool() 的调用循环并且从不检测变化?我知道如果我只是在一个变量上循环,等待它达到 0,我将需要 volatile,但我不确定是否实现了 boost::shared_ptr以这种方式在这里没有必要。

编辑:我完全知道条件变量可以用来以不同的方式解决这个问题。但在这种情况下,繁忙的循环非常少见,并且争用条件变量上的锁是一种我们不愿承担的开销。

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