7
votes

Existe-t-il une mise en oeuille de piscine Safe Saffre Safe C ++?

Je dois créer un pool de connexions de socket qui seront servies à plusieurs threads de travailleurs. Existe-t-il une mise en oeuvre de piscine d'objet sécurisé avec une fonctionnalité similaire à Apache Commons ' genericObjectpool ?


0 commentaires

3 Réponses :


2
votes

Consultez boost . Flyweight .


2 commentaires

Y a-t-il une discussion sur les Documents de Boost sur la sécurité des plans de fly de fil?


@Shrin: Threeweight est ou non thread-Safe dépend du Politique de verrouillage vous spécifiez.



7
votes

J'utilise habituellement TBB pour implémenter des pools évolutifs à fil-coffre-fort.

    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);}); 
        }
    };


0 commentaires

1
votes

La meilleure implémentation prête à l'emploi que j'ai trouvée jusqu'à présent est celle de POCO (composants portables - Cadre NEAT C ++).

Il y a une classe poco :: objetpool - voir la documentation Ici . Vous pouvez le personnaliser de plusieurs manières fournissant votre propre usine qui crée, valide, désactive et détruit des objets.

Également étrangement au moment de la rédaction de cette réponse, leur site ne contient pas le dernier document généré - ma dernière source POCO a une version plus récente avec quelques nouvelles fonctionnalités, par exemple. Il y a un paramètre TimeOut pour BrowRObject () maintenant qui a été critique pour moi.


0 commentaires