(21-12-2022 18:16)IgnacioP escribió: [ -> ]Buenas! Desde ya muchas gracias por compartir estos finales! Te quería preguntar en el punto 3B por qué la respuesta correcta es la B, no generaría deadlock? Si tendrías un resumen o algo donde explique bien eso te lo re agradecería!
La respuesta correcta es la B por lo siguiente:
En T1 ambos procesos se setean, uno con repeteable read y el otro con read commited.
En T2, el PA lee el registro de la tabla Producto que tiene un valor de prod_codigo = 1. Como PA seteo con repeteable read, va a poner un tipo de bloqueo sobre ese registro, para poder mantener sus propiedades, que son lectura repetible, y que no existan lescturas basuras. Basicamente bloquearia a toda transaccion que quiera hacer delete o update sobre el prod_codigo=1.
EN T3 el PB, quiere leer de la tabla Producto el registro con prod_codigo=1, y lo puede leer, ya que solamente esta haciendo lectura. Si PB, querria hacer un delete o update, ahi si se bloquearia. COmo PB esta seteado con read commited, solo va a bloquear el registro por el lapso que realiza la lectura, y luego lo libera.
En T4, el PA, modifica el registro que tiene el prod_codigo=1, y le cambia el detalle a "Proceso A". Esto lo puede hacer, ya que no hay ningun proceso que haya bloqueado a prod_codigo=1. Porq PB, solo bloqueo ese registro en T3 durante la lectura del mismo, y luego de eso, lo desbloquea.
En T5, el PB quiere modificar el pord_codigo=1, pero no va a poder, ya que se encuentra bloqueado por PA, para delete y update, por lo tanto se bloquea.
En T6, el PA commitea el valor "Proceso A" y desbloquea ese registro.
Luego de que eso, se desbloquea el PB, que estaba bloqueado, y puede hacer el update del prod_codigo=1, cambiando el detalle a "Proceso B". Y posteriormente a eso, realiza el commit. Quedando como el valor final "Proceso B".
Por eso la opcion correcta era la B y no con deadlock