Sécurité des threads dans la bibliothèque standard C++
Les règles de sécurité des threads suivantes s’appliquent à toutes les classes de la bibliothèque standard C++, y compris shared_ptr
, comme décrit ci-dessous. Des garanties plus fortes sont parfois fournies : par exemple, les objets iostream standard, comme décrit ci-dessous, et les types destinés à la multithreading, comme ceux dans <atomic>
.
Un objet est thread-safe pour la lecture à partir de plusieurs threads. Par exemple, étant donné un objet A, la lecture de A à partir du thread 1 et du thread 2 simultanément est sécurisée.
Si un thread écrit dans un objet, toutes les lectures et écritures dans cet objet sur le même thread ou d'autres threads doivent être protégées. Par exemple, étant donné un objet A, si le thread 1 écrit dans A, le thread 2 doit être dans l'impossibilité d'écrire ou de lire dans A.
Il est sûr de lire et d’écrire dans une instance d’un type même si un autre thread lit ou écrit dans une autre instance du même type. Par exemple, étant donné les objets A et B du même type, il est sûr quand A est écrit dans le thread 1 et B est lu dans le thread 2.
shared_ptr
Plusieurs threads peuvent lire et écrire simultanément différents shared_ptr
objets, même lorsque les objets sont des copies qui partagent la propriété.
iostream
Les objets cin
iostream standard, , , clog
wcin
cerr
wcout
cout
wcerr
et wclog
suivent les mêmes règles que les autres classes, à cette exception : il est sûr d’écrire dans un objet à partir de plusieurs threads. Par exemple, le thread 1 peut écrire cout
en même temps que le thread 2. Toutefois, les sorties des deux threads peuvent alors être mélangées.
Remarque
La lecture à partir d'une mémoire tampon de flux n'est pas considérée comme étant une opération de lecture. Au lieu de cela, il est considéré comme une opération d’écriture, car l’état de la classe est modifié.