是否有开源线程安全的C ++对象池实现?

我需要创建一个套接字连接池,它将被提供给多个工作线程。是否有一个线程安全的对象池实现,其功能类似于ApacheCommons'
GenericObjectPool
?     
已邀请:
看看boost.flyweight。     
我通常使用TBB来实现线程安全的可伸缩池。
    template <typename T>
    class object_pool
    {
        std::shared_ptr<tbb::concurrent_bounded_queue<std::shared_ptr<T>>> pool_;
    public:
        object_pool() 
        : pool_(new tbb::concurrent_bounded_queue<std::shared_ptr<T>>()){}

        // Create overloads with different amount of templated parameters.
        std::shared_ptr<T> create() 
        {         
              std::shared_ptr<T> obj;
              if(!pool_->try_pop(obj))
                  obj = std::make_shared<T>();

              // Automatically collects obj.
              return std::shared_ptr<T>(obj.get(), [=](T*){pool_->push(obj);}); 
        }
    };
    
到目前为止,我发现的最好的即用型实现是Poco(可移植组件 - 整洁的C ++框架)中的实现。 有一个类
Poco::ObjectPool
- 请参阅此处的文档。您可以通过多种方式自定义它,提供自己的工厂,用于创建,验证,停用和销毁对象。 同样奇怪的是,在撰写此答案时,他们的网站不包含最新生成的文档 - 我最新的Poco源代码有一个带有一些新功能的新版本,例如现在有一个
borrowObject()
的超时参数对我来说很关键。     

要回复问题请先登录注册