Maison > développement back-end > C++ > Est-ce que std::shared_ptr est thread-safe pour l'objet qu'il gère ?

Est-ce que std::shared_ptr est thread-safe pour l'objet qu'il gère ?

Patricia Arquette
Libérer: 2024-11-15 13:03:02
original
331 Les gens l'ont consulté

Is std::shared_ptr thread-safe for the object it manages?

Dans quelle mesure std::shared_ptr garantit-il la sécurité des threads ?

Questions originales :

  1. Référence le comptage dans std::shared_ptr est garanti sûr pour les threads et indépendant de la plate-forme.
  2. Seul le thread contenant la dernière référence appellera delete sur l'objet partagé.
  3. std::shared_ptr le fait ne fournit aucune sécurité de fil pour l'objet qu'il stocke.

Réponses :

Oui, les deux premières questions sont exactes. Le comptage de références de std::shared_ptr et l'invocation du destructeur sont thread-safe.

La troisième question est également correcte. std::shared_ptr ne garantit pas la sécurité des threads pour l'objet qui y est stocké. L'objet lui-même peut ne pas être thread-safe et, par conséquent, y accéder à partir de plusieurs threads sans synchronisation appropriée pourrait entraîner un comportement indéfini.

Exemple :

Considérez ce qui suit morceau de pseudocode :

// Thread I
shared_ptr<A> a (new A (1));

// Thread II
shared_ptr<A> b (a);

// Thread III
shared_ptr<A> c (a);

// Thread IV
shared_ptr<A> d (a);

d.reset (new A (10));
Copier après la connexion
  • Question : L'appel de reset() dans le fil IV supprimera-t-il l'instance précédente de A créée dans le fil I et la remplacera par une nouvelle instance ?
  • Réponse : Non, seul d pointera vers le nouveau A(10), tandis que a, b et c continueront à pointer vers le A(1) d'origine.

Cela est dû au fait que reset() n'affecte pas les références des autres threads au même objet. d est le seul pointeur partagé qui pointera vers la nouvelle instance, tandis que les autres références (a, b et c) resteront pointant vers l'instance d'origine.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal