programacion - ¿Es un comportamiento bien definido modificar un elemento de una matriz mientras que otra cadena modifica otro elemento de la misma matriz?
vectores en c (1)
Lo que trato de hacer es un comportamiento bien definido.
Ver ISO / IEC 9899: 2011 §5.1.2.4.27:
NOTA 13 Las transformaciones del compilador que introducen asignaciones en una ubicación de memoria potencialmente compartida que no serían modificadas por la máquina abstracta generalmente están excluidas por esta norma, ya que tal asignación podría sobrescribir otra asignación por una secuencia diferente en casos en que una ejecución abstracta de la máquina no haber encontrado una carrera de datos. Esto incluye implementaciones de asignación de miembros de datos que sobrescriben miembros adyacentes en ubicaciones de memoria separadas. También generalmente evitamos la reordenación de las cargas atómicas en los casos en que los atómicos en cuestión pueden alias, ya que esto puede violar las reglas de "secuencia visible".
Tenga en cuenta que este lenguaje se introdujo con C11 para hacer optimizaciones que causan errores como este ilegal. Los compiladores anteriores a C11 pueden no cumplir con esta regla.
Dada una matriz de tipo foo_t[n]
y un conjunto de n subprocesos, donde cada uno de los n subprocesos lee y modifica un elemento diferente de la matriz, ¿necesito sincronizar explícitamente las modificaciones de la matriz o puedo suponer que los miembros que modifican simultáneamente? de la matriz es un comportamiento bien definido? ¿Importa cuán grande es foo_t
/ qué alineación tiene?