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
ay los campos de bitdye.eeson ubicaciones de memoria separadas, y pueden modificarse simultáneamente sin interferir entre sí. Los campos de bitsbycjuntos constituyen la cuarta ubicación de memoria. Los campos de bitsbycno pueden modificarse simultáneamente, perobya, 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?