Seguridad para subprocesos en la biblioteca estándar de C++Thread Safety in the C++ Standard Library

Las siguientes normas de seguridad de subprocesos se aplican a todas las clases de la biblioteca estándar de C++, lo que incluye shared_ptr, como se describe a continuación.The following thread safety rules apply to all classes in the C++ Standard Library—this includes shared_ptr, as described below. A veces se proporcionan garantías más sólidas, por ejemplo, los objetos iostream estándar, como se describe a continuación, y tipos diseñados específicamente para el multithreading, como los de <atomic> .Stronger guarantees are sometimes provided—for example, the standard iostream objects, as described below, and types specifically intended for multithreading, like those in <atomic>.

Un objeto es seguro para subprocesos para leer desde múltiples subprocesos.An object is thread-safe for reading from multiple threads. Por ejemplo, dado un objeto A, es seguro leer A desde el subproceso 1 y desde el subproceso 2 simultáneamente.For example, given an object A, it is safe to read A from thread 1 and from thread 2 simultaneously.

Si un subproceso está escribiendo un objeto, todas las lecturas y escrituras a este objeto del mismo subproceso o de otro deben protegerse.If an object is being written to by one thread, then all reads and writes to that object on the same or other threads must be protected. Por ejemplo, dado un objeto A, si el subproceso 1 está escribiendo a A, debe evitarse que el subproceso 2 lea o escriba en A.For example, given an object A, if thread 1 is writing to A, then thread 2 must be prevented from reading from or writing to A.

Es seguro leer y escribir una instancia de un tipo incluso si otro subproceso está leyendo o escribiendo una instancia diferente del mismo tipo.It is safe to read and write to one instance of a type even if another thread is reading or writing to a different instance of the same type. Por ejemplo, dados los objetos A y B del mismo tipo, es seguro que A se esté escribiendo en el subproceso 1 y B se esté leyendo en el subproceso 2.For example, given objects A and B of the same type, it is safe when A is being written in thread 1 and B is being read in thread 2.

shared_ptrshared_ptr

Varios subprocesos pueden leer y escribir simultáneamente diferentes objetos shared_ptr, incluso cuando los objetos son copias que comparten la propiedad.Multiple threads can simultaneously read and write different shared_ptr objects, even when the objects are copies that share ownership.

iostreamiostream

Los objetos iostream estándar cin, cout, cerr, clog, wcin, wcout, wcerr y wclog siguen las mismas normas que las otras clases, con esta excepción: se puede escribir en un objeto desde varios subprocesos.The standard iostream objects cin, cout, cerr, clog, wcin, wcout, wcerr, and wclog follow the same rules as the other classes, with this exception: it is safe to write to an object from multiple threads. Por ejemplo, el subproceso 1 puede escribir en cout al mismo tiempo que el subproceso 2.For example, thread 1 can write to cout at the same time as thread 2. Sin embargo, esto puede causar que la salida de los dos subprocesos se combine.However, this can cause the output from the two threads to be intermixed.

Nota

Leer desde un búfer de secuencia no se considera una operación de lectura.Reading from a stream buffer is not considered to be a read operation. En lugar de eso, se considera que es una operación de escritura, porque el estado de la clase cambia.Instead it is considered to be a write operation because the state of the class is changed.

Consulta tambiénSee also

Información general sobre la biblioteca estándar de C++C++ Standard Library Overview