que fue hecho esta pregunta en una entrevista # .NET/C:Transacciones - ¿Cómo evitar interbloqueos?
Si tenemos dos hilos T1 y T2. T1 adquiere un bloqueo en obj1 y luego hace procesamiento y adquiere un bloqueo en obj2. T2 adquiere un bloqueo en obj2 y luego procesa y adquiere un bloqueo en obj1. Entonces, podemos tener un punto muerto . ¿Cuál es la técnica común que utilizamos en multihilo para evitar esta situación?
me respondió diciendo que T1 y T2 deben tener algún mecanismo para comunicarse y que deberíamos hacer la codificación de tal manera que T2 comienza a hacer su trabajo sólo después de T1 ha señalado que se hace con su trabajo. El entrevistador me preguntó si sabía sobre transacciones y cómo podemos usarlo para enfrentar esta situación de punto muerto. Tengo cierta cantidad de experiencia en subprocesos múltiples en el lado de la interfaz de usuario en winforms. Pero, nunca he usado transacciones. ¿Puede alguien decirme más sobre esto o dirigirme a una url/book,
@Ash Obtengo el punto de adquirir bloqueos en el mismo orden. Pero, entonces, ¿qué era esto de las transacciones? – Sandbox
@Sandbox, para mí parece que están hablando de una "transacción" en el sentido general de garantizar que un conjunto de operaciones distintas se realizan como una (es decir, atómicamente). En la base de datos esto se logra a través de la palabra clave Begin Transaction, en .net se obtiene (normalmente) usando la instrucción de bloqueo. He agregado un libro altamente recomendado por Joe Duffy en mi respuesta. – Ash