Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有一个开源的线程安全C++;对象池实现?_C++_Thread Safety_Object Pooling - Fatal编程技术网

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

C++ 是否有一个开源的线程安全C++;对象池实现?,c++,thread-safety,object-pooling,C++,Thread Safety,Object Pooling,我需要创建一个套接字连接池,它将服务于多个工作线程。是否有一个线程安全的对象池实现,其功能类似于Apache Commons的GenericObjectPool?签出..我通常用于实现线程安全的可伸缩池 template <typename T> class object_pool { std::shared_ptr<tbb::concurrent_bounded_queue<std::shared_ptr<T>>

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

签出..

我通常用于实现线程安全的可伸缩池

    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);}); 
        }
    };
模板
类对象池
{
std::共享的ptr池;
公众:
对象池()
:pool_(新tbb::concurrent_bounded_queue()){}
//使用不同数量的模板参数创建重载。
std::shared_ptr create()
{         
std::共享对象;
如果(!pool->try\u pop(obj))
obj=std::使_共享();
//自动收集obj。
返回std::shared_ptr(obj.get(),[=](T*){pool_uu->push(obj);});
}
};

> > p>目前为止,我发现的最适合使用的实现是POCO(便携式组件-整洁C++框架)中的一个。 有一个类
Poco::ObjectPool
——请参阅文档。您可以通过多种方式对其进行自定义,提供自己的工厂来创建、验证、停用和销毁对象


同样奇怪的是,在撰写此答案时,他们的网站不包含最新生成的文档-我的最新Poco源代码有一个新版本,具有一些新功能,例如,
borrowObject()有一个超时参数
现在,这对我来说至关重要。

关于flyweight线程安全的boost文档是否有任何讨论?@shrin:flyweight是否是线程安全的取决于您指定的。