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 code>? P>
3 Réponses :
Consultez boost .
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.
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);}); } };
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 ++). P>
Il y a une classe É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 poco :: objetpool code> - 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. P>
BrowRObject () code> maintenant qui a été critique pour moi. P>