2012-01-23 14 views
10

Tengo un problema para entender por qué shared_ptr usa instrucciones de CPU atómica ... No puedo entender las razones porque NO es seguro para subprocesos. ¿Alguien puede explicarme?por qué std :: shared_ptr usa operaciones de CPU atómicas

Si se pregunta cómo sé que utiliza intstuructions atómicas: hubo un clip de C++ y más allá del que hablan Herb y Andrei, pero nunca mencionan las razones por las que es así.

Respuesta

15

Cualquier instancia de shared_ptr es segura para múltiples hilos. Los datos a los que apunta no son seguros para múltiples hilos. Ver this.

Las instrucciones atómicas, si se aplican correctamente (protección realizada en el mismo orden por acceso de subproceso competidor) es una forma de implementar la seguridad de subprocesos. Otra forma es mediante el uso de mutexes.

Ver una pregunta similar para BOOST: Is boost shared_ptr xxx thread safe?

+6

Para ser más específicos: el recuento de referencias compartidas dentro de 'shared_ptr' se puede acceder por varios hilos. Es por eso que es necesario incrementarlo/disminuirlo atómicamente. –

2

Herb Sutter simplemente shared_ptr utilizado como un buen ejemplo en su gotw 95, que va allí a elaborar sobre decisión de diseño:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/

+0

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. (Y soy demasiado vago para hacer el trabajo) – johnchen902

Cuestiones relacionadas