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 bitd
ye.ee
son ubicaciones de memoria separadas, y pueden modificarse simultáneamente sin interferir entre sí. Los campos de bitsb
yc
juntos constituyen la cuarta ubicación de memoria. Los campos de bitsb
yc
no pueden modificarse simultáneamente, perob
ya
, 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?