Condividi tramite


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 ciniostream standard , cout, cerrclog, , wcinwcout, , wcerre 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.

Vedi anche

Panoramica sulla libreria standard C++