studio reales proyectos programacion para introducción incluye guia fuente desarrollo código aplicaciones c++ multithreading c++11 thread-safety memory-model

c++ - reales - manual programacion android



Modelo de memoria C++ 11 y acceso a diferentes miembros de la misma estructura en diferentes hilos (1)

Es seguro. Citando C ++ 11:

[intro.memory] p3:

Una ubicación de memoria es un objeto de tipo escalar o una secuencia máxima de campos de bits adyacentes que tienen un ancho distinto de cero. [ Nota: varias características del lenguaje, como referencias y funciones virtuales, pueden incluir ubicaciones de memoria adicionales que no son accesibles para los programas pero que son administradas por la implementación. —Descripción final ] Dos subprocesos de ejecución (1.10) pueden actualizarse y acceder a ubicaciones de memoria separadas sin interferir entre sí.

[intro.memory] p5:

[ Ejemplo: una estructura declarada como

struct { char a; int b:5, c:11, :0, d:8; struct {int ee:8;} e; }

contiene cuatro ubicaciones de memoria separadas: El campo a y los campos de bit d y e.ee son ubicaciones de memoria separadas, y pueden modificarse simultáneamente sin interferir entre sí. Los campos de bits b y c juntos constituyen la cuarta ubicación de memoria. Los campos de bits b y c no pueden modificarse simultáneamente, pero b y a , por ejemplo, sí pueden modificarse. —En ejemplo ]

Juntos significan que los miembros a y b de X son ubicaciones de memoria separadas y, por lo tanto, se puede acceder al mismo tiempo.

Supongamos que tienes las siguientes definiciones:

struct X { char a, b; }; X x;

Y ahora suponga que tiene dos hilos, uno de los cuales lee y escribe xa pero nunca accede a xb mientras que el otro lee y escribe xb pero nunca accede a xa . Ninguno de los hilos utiliza bloqueos u otras primitivas de sincronización. ¿Está garantizado que esto funcione en C ++ 11? ¿O cuenta como acceso al mismo objeto y, por lo tanto, necesita un bloqueo?