7

複数のワーカー スレッドに提供されるソケット接続のプールを作成する必要があります。Apache Commons と同様の機能を備えたスレッド セーフなオブジェクト プールの実装はありますGenericObjectPoolか?

4

3 に答える 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 に答える
2

ブーストをチェックしてください。フライ級

于 2011-03-01T23:20:08.963 に答える
1

これまでに見つけたすぐに使える最適な実装は、Poco (Portable Components - きちんとした C++ フレームワーク) のものです。

クラスがあります。Poco::ObjectPoolドキュメントはこちらを参照してください。オブジェクトを作成、検証、非アクティブ化、および破棄する独自のファクトリを提供するいくつかの方法でカスタマイズできます。

また、奇妙なことに、この回答を書いている時点で、彼らのサイトには最新の生成されたドキュメントが含まれていません。私の最新の Poco ソースには、いくつかの新しい機能を備えた新しいバージョンがありborrowObject()ます。

于 2016-11-23T09:36:42.507 に答える