7

我需要创建一个套接字连接池,它将提供给多个工作线程。是否有功能类似于 Apache Commons 的线程安全对象池实现GenericObjectPool

4

3 回答 3

7

我通常使用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);}); 
        }
    };
于 2011-03-01T23:36:45.597 回答
2

检查升压蝇量级

于 2011-03-01T23:20:08.963 回答
1

到目前为止,我发现的最好的即用型实现是 Poco(便携式组件 - 整洁的 C++ 框架)中的实现。

有一个类Poco::ObjectPool- 请参阅此处的文档。您可以通过多种方式自定义它,提供您自己的创建、验证、停用和销毁对象的工厂。

Also strangely at the time of writing this answer their site contains not the latest generated doc - my latest Poco source has a newer version with some new functionality, e.g. there is a timeout parameter for borrowObject() now which was critical for me.

于 2016-11-23T09:36:42.507 回答