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>