Question :
Plusieurs threads peuvent-ils appeler simultanément le push_back () sur un objet std::vector partagé sans compromettre la sécurité des threads ? Ou l'utilisateur doit-il implémenter des mécanismes de synchronisation supplémentaires ?
Réponse :
Contrairement aux hypothèses populaires, le vecteur C standard (std::vector) et le Le vecteur Boost (boost::vector) offre des garanties limitées de sécurité des threads conformément à la norme C.
Sécurité des threads Garanties :
Ces garanties peuvent ne pas correspondre aux attentes typiques en matière de sécurité des threads, mais elles sont raisonnables compte tenu de la conception des conteneurs standard, qui donne la priorité à un accès efficace dans les scénarios à thread unique. L'intégration de mécanismes de verrouillage dans leurs méthodes nuirait à cette efficacité.
Verrouillage externe :
Pour garantir une sécurité totale des threads lorsque plusieurs threads accèdent simultanément aux conteneurs, des mécanismes de synchronisation externes doivent être implémentés . Les exigences spécifiques sont décrites dans la section 17.6.4.10 [res.on.objects] paragraphe 1 de la norme C.
Considérations sur le vecteur Boost :
Les garanties de sécurité des threads pour le vecteur Boost devraient être identiques à ceux du vecteur standard, compte tenu de leurs interfaces similaires. Cependant, le verrouillage externe est toujours nécessaire pour garantir un accès simultané sécurisé.
Conclusion :
Bien que les vecteurs standard C et Boost offrent certaines garanties de sécurité des threads, elles sont limitées. Pour une sécurité totale des threads dans les scénarios multithreads, des mécanismes de synchronisation externes doivent être utilisés pour éviter les courses de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!