我需要创建一个套接字连接池,它将提供给多个工作线程。是否有功能类似于 Apache Commons 的线程安全对象池实现GenericObjectPool
?
问问题
4192 次
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 回答
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 回答