¿No fue [math] flag [B] [/ math] modificado por thread [math] B [/ math] antes de [math] read_ {B} (flag [A] == false) [/ math]? ¿Por qué es una contradicción?

La sección crítica tiene tres pasos:

  1. Bloquear
  2. Ejecutar sección crítica
  3. desbloquear

La matriz de indicadores aquí es una matriz que se usa para indicar si el subproceso está libre de ejecutarse en su etapa crítica. Nota: Un proceso puede ejecutar su etapa crítica solo después de haber ejecutado con éxito Lock (). Asumamos lo siguiente:

  • Hay dos hilos A y B (A es hilo 0 y B es hilo 1).
  • B ya está en su sección crítica (por lo tanto, el indicador [1] es verdadero).
  • En este instante, A comienza a ejecutar Lock () (por lo tanto, el indicador [0] es verdadero).

Ahora A esperará a que el indicador [1] sea falso antes de pasar a la sección crítica. Pero el indicador [1] puede establecerse en falso solo después de que el hilo B ejecute su desbloqueo (), lo que a su vez significa que ha ejecutado su sección crítica correctamente. Tan pronto como B establezca su bandera en falso, A se moverá en su sección crítica.

Ahora su consulta es la parte triste cuando ambos procesos están en el paso 7 al mismo tiempo:

En este punto, ambos avanzan al paso 8, y aquí esperarán a que sus contrapartes conviertan su bandera en falsa, lo que a su vez conduce a una condición de punto muerto.

En caso de que tenga suerte y no sean concurrentes, siempre encontrará que a la vez solo un proceso puede ejecutar la sección crítica. Por definición, la exclusión mutua se refiere al requisito de garantizar que no haya dos procesos concurrentes en su sección crítica al mismo tiempo. Entonces, ya sea la condición normal o la condición de punto muerto, ambos procesos no pueden ejecutar la sección crítica simultáneamente. Esto contradice el hecho de que al comienzo de la prueba asumimos que LockOne no satisface la propiedad de condición mutua. Por lo tanto, demostró que realmente satisface.

More Interesting

En Java, ¿por qué usar un iterador para iterar a través de LinkedList más rápido que usar un bucle for?

¿Cuál es la diferencia entre notación matemática y notación de programación? ¿Por qué usar uno sobre el otro? ¿Por qué no solo usar siempre la programación?

¿Cuál es la diferencia entre CS y matemáticas y computación?

¿Cuáles son algunos algoritmos y estructuras de datos relevantes para la robótica?

¿Cómo podemos escribir un código eficiente para determinar números primos hasta un valor dado, de modo que el límite de tiempo para cada caso de prueba no exceda un segundo en lenguaje C?

¿Cuán avanzada es la matemática discreta utilizada en la informática teórica?

Si el Universo se restableciera al estado en el que acaba de comenzar, ¿podría el mundo ser diferente después de exactamente la misma cantidad de tiempo que la edad del Universo ahora? ¿O sería exactamente lo mismo?

Cómo crear un cuestionario de matemáticas en Python

¿Cómo se puede saber el mejor lugar para colocar una pieza determinada en Tetris?

¿Cuáles son todas las aplicaciones conocidas de las técnicas de optimización de colonias de hormigas?

Cómo representar más de la cantidad predeterminada de dígitos en números como (1/7) en Python

Cómo calcular (la 11ma potencia 10) / (la 10ma potencia 10) sin usar una calculadora

¿Qué conceptos matemáticos difíciles se pueden entender fácilmente mediante la programación?

¿Puede una máquina tener verdadera inteligencia artificial sin estar basada en matemáticas superiores?

¿Existe algún plan de estudios en línea que enseñe matemáticas con un enfoque en la programación o mecánica de videojuegos?