C++ 是否有一个开源的线程安全C++;对象池实现?
我需要创建一个套接字连接池,它将服务于多个工作线程。是否有一个线程安全的对象池实现,其功能类似于Apache Commons的GenericObjectPool?签出..我通常用于实现线程安全的可伸缩池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>>
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是否是线程安全的取决于您指定的。