Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Le regole di thread safety seguenti sono applicabili a tutte le classi della libreria standard C++, inclusa shared_ptr
, come illustrato di seguito. A volte vengono fornite garanzie più avanzate, ad esempio gli oggetti iostream standard, come descritto di seguito, e i tipi destinati al multithreading, come quelli in <atomic>
.
Un oggetto è is thread-safe per la lettura da più thread. Ad esempio, dato un oggetto A, è possibile leggere in modo sicuro A contemporaneamente dal thread 1 e dal thread 2.
Se un thread scrive in un oggetto, tutte le operazioni di lettura e scrittura in quell'oggetto nello stesso thread o in altri thread dovranno essere protette. Ad esempio, dato un oggetto A, se il thread 1 scrive in A, sarà necessario impedire al thread 2 di leggere o scrivere in A.
È possibile leggere e scrivere in un'istanza di un tipo anche se un altro thread sta leggendo o scrivendo in un'istanza diversa dello stesso tipo. Ad esempio, gli oggetti A e B dello stesso tipo sono sicuri quando A viene scritto nel thread 1 e B viene letto nel thread 2.
shared_ptr
Più thread possono leggere e scrivere contemporaneamente oggetti diversi shared_ptr
, anche quando gli oggetti sono copie che condividono la proprietà.
iostream
Gli oggetti cin
iostream standard , cout
, cerr
clog
, , wcin
wcout
, , wcerr
e wclog
seguono le stesse regole delle altre classi, con questa eccezione: è possibile scrivere in un oggetto da più thread. Ad esempio, il thread 1 può scrivere cout
in contemporaneamente al thread 2. Ciò può tuttavia provocare una mescolanza nell'output dei due thread.
Nota
La lettura da un buffer del flusso non è considerata un'operazione di lettura, Viene invece considerata un'operazione di scrittura perché lo stato della classe viene modificato.