[英]Is there an open source thread safe C++ object pool implementation?
我需要創建一個套接字連接池,它將被提供給多個工作線程。 是否有一個線程安全的對象池實現,其功能類似於Apache Commons的GenericObjectPool
?
我通常使用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()
有一個超時參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.