gpt4 book ai didi

c++ - Boost weak_ptr在多线程程序中实现资源池

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:22 27 4
gpt4 key购买 nike

我正在考虑使用 boost::weak_ptr 来实现一个对象池,这样当没有人使用其中一个对象时,它们就会被回收。不过,我担心的是,它是一个多线程环境,而且似乎在指向超出范围的对象的最后一个 shared_ptr 与从 weak_ptr 构造的新 shared_ptr 之间存在竞争条件。通常,您会使用锁或其他东西来保护此类操作;然而,这里的重点是您不知道 shared_ptr 何时可能超出范围。

我对 boost::shared_ptr 和 boost::weak_ptr 有什么误解吗?如果没有,有人对做什么有什么好的建议吗?

谢谢。

安德鲁

最佳答案

要使用 weak_ptr,您通常必须通过构造 shared_ptr 来获取强引用。这最后一步是原子的:你要么得到一个强引用,要么你得到一个 bad_weak_ptr 抛出的异常。 (或者,在 weak_ptr 上调用 lock(),并获得强引用或 null。)

示例(使用 lock();很容易适应其他风格):

void do_something(weak_ptr<foo> weak) {
// Grab strong reference
shared_ptr<foo> strong(weak.lock());
if (strong) {
// We now have a strong reference to use
} else {
// No strong references left; object already freed
}
}

关于c++ - Boost weak_ptr在多线程程序中实现资源池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160334/

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