Sincronización por hardware

Sincronización por hardware

de Diego Eloy Sanchez Donadini -
Número de respuestas: 2

Buenas, me quedó una duda sobre este tema:

En las diapos de sincronización por hardware, cuando se resuleve la sección crítica usando TestAndSet, luego se hace lock := False, pero para que eso funcione bien, esa instrucción debería ser atómica no? si no lo es puede pasar que en el medio de la asignación, otro proceso gane el CPU y ponga True en lock mientras el otro está poniendo False, y se genera una inconsistencia. Creo que pasa lo mismo para Swap.




Saludos

En respuesta a Diego Eloy Sanchez Donadini

Re: Sincronización por hardware

de Manuel Freire -
Hola,

No veo como podría haber una inconsistencia, la instrucción lock = false se va a ejecutar en algún punto y el siguiente proceso que ejecute testAndSet(lock) se va a "quedar" con el false. Si luego de salir de la región crítica pierde la cpu el proceso que haga lock = true va a seguir en el while, es indistinto a que le saque la cpu ahí o antes.

Saludos!
En respuesta a Manuel Freire

Re: Sincronización por hardware

de Diego Eloy Sanchez Donadini -
Hola Manuel, gracias por la respuesta.

Entiendo que la "Función" testAndSet(lock) se ejecute de manera atómica. El caso que me genera duda es cuando fuera del testAndSet(lock) se hace lock:=False, esa instrucción por si sola no está protegiendo su memoria, entonces en el caso de que la asignación tenga varias instrucciones de procesador, puede pasar que ese proceso sea bloqueado en el medio de la instrucción lock:=False, y otro proceso que use la misma variable se ejecute (tal vez tenga un testAndWait) entonces la varible puede no quedar consistente.