Estimado,
Consideremos un procesador multinúcleo, donde estos dos procesos del algoritmo de peterson puedan ejecutar a la misma vez. Lo que se tiene que respetar para que el algoritmo funcione, es que en todo momento, ambos procesos vean los mismos valores en las variables. Es decir, si ambos ejecutan las líneas
flag[i] = true;
turn = j;
a la vez, entonces no importa quién haya ejecutado primero y quién haya ejecutado después, pero al leer los valores en el while, deben ver los mismos valores en la variables.
Lo que sucede en las arquitecturas modernas, es que para no perder tiempo, los loads y stores se envían al sistema de memoria y continúan la ejecución de instrucciones, utilizando estructuras internas a la CPU para adelantar los valores. Lo que puede pasar, es que ambos procesadores ejecuten 'turn = j' a la vez, y al evaluar la condición del while, vean valores diferentes en la variable turn (cada uno va a leer el valor que seteó), por lo tanto ambos entrarían en la sección crítica. Esto intuitivamente hace pensar que los procesadores 'funcionan mal', pero no, es un tema de sincronizacion, los procesadores respetan ciertas reglas definidas en lo que se llama su modelo de consistencia de memoria. Naturalmente, no se exige que todas las CPUs tengan que ver el mismo valor de memoria si inician lecturas al mismo tiempo
Saludos!
Federico