【问题标题】:Concurrent object pool whose products' lifetime is fully controlled by the smart pointer(s) containing the object并发对象池,其产品的生命周期完全由包含对象的智能指针控制
【发布时间】:2015-11-20 17:46:25
【问题描述】:

我想在 C++ 中设计一个并发对象池,可能的原型为:

template<std::size_t OBJ_SIZE>
class Pool {
public:
    template<typename T>
    void new(std::shared_ptr<T> & product);
    // more details...
};
  • 一旦返回对象(产品),其生命周期就完全由包含该对象的智能指针控制。
  • 池可能被多个线程使用。

我们如何在用户完成后自动回收对象/内存?

我的想法是在池中有一个 delete() 方法,在产品的析构函数中调用。

有更好的设计吗?例如一种产品类与 Pool 耦合较少的方式(注意它是一个通用池)。欢迎任何想法。

【问题讨论】:

  • 我不确定我是否理解这些要求。你是说要分配对象的生命周期由传入的不相关的shared_ptr的生命周期控制?
  • @RichardHodges,shared_ptr 用于包含返回的对象,并控制其生命周期。

标签: c++ multithreading object-pooling


【解决方案1】:

如果我正确理解您的问题,您需要返回一个带有自定义删除器的 shared_pointer。 Deleter 将知道如何使用池的 deallocate() 方法删除对象。这是解决此问题的标准方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2010-12-02
    • 2021-08-12
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多