簡體   English   中英

是否有開源線程安全的C ++對象池實現?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM