gpt4 book ai didi

c++ - boost::lockfree::stack 可以安全地接受字符串指针吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:33 25 4
gpt4 key购买 nike

我发现将 string 指针传递给 boost::lockfree::queue 会导致内存泄漏,因为 string指针无法完全释放。

boost::lockfree::stack 的情况是否相同? ?

boost::lockfree::stack 的要求是:

  • T must have a copy constructor

如果不能使用常规的 string 指针,是否有任何其他方法可以将 string 放入 boost::lockfree::stack?

常规字符串

当我尝试这个时

boost::lockfree::stack<string> my_stack(128);

我得到这些错误

 BOOST_STATIC_ASSERT(boost::has_trivial_assign<T>::value);
BOOST_STATIC_ASSERT(boost::has_trivial_destructor<T>::value);

这对我来说似乎很奇怪,可能是因为我没有经验,因为这些实际上是 boost::lockfree::queue 的要求现在奇怪的是没有文档

  • T must have a copy constructor
  • T must have a trivial assignment operator
  • T must have a trivial destructor

最佳答案

  1. 缺少的文档是 Doxygen 错误,文档页面的名称来自 MACRO :(,它位于:http://www.boost.org/doc/libs/1_55_0/doc/html/boost/lockfree/BOOST_NO_CXX1_idp100289128.html

  2. 事实上,堆栈似乎具有与队列相同的元素类型要求,尽管文档并未提及这一点。更糟糕的是,boost::string_ref 似乎也没有保留为 POD。

所以我的建议是将指针存储到不可变字符串对象的“池”中,并在释放队列时释放池。这样,您只需以内存消耗不会失控的方式管理队列的生命周期。

在某些方面,这类似于实现穷人的 GC,是的,它强制吞吐量中的定期延迟以重新初始化队列;公平地说,无锁内存管理领域很常见,正如 Boost Lockfree 文档所述,现有的大多数“可行”内存回收方案都已获得专利。

你可以看看 libcds: Lock-free Concurrent Datastructures 如果您想玩弄其中一些算法。我认为该库的作者一直在与 Boost 开发人员就为 Boost 提议 libcds 进行积极对话,但由于专利问题,它可能没有发生。

关于c++ - boost::lockfree::stack 可以安全地接受字符串指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23178949/

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