Mi è stato chiesto questa domanda in un .net/C# intervista:Transazioni - Come evitare i deadlock?
se abbiamo due thread T1 e T2. T1 acquisisce un blocco su obj1 e quindi esegue l'elaborazione e acquisisce un blocco su obj2. T2 acquisisce un blocco su obj2 e quindi esegue un po 'di elaborazione e acquisisce un blocco su obj1. Quindi, possiamo avere un deadlock . Qual è la tecnica comune che usiamo nel multithreading per evitare questa situazione?
ho risposto dicendo che T1 e T2 dovrebbe avere qualche meccanismo per comunicare e che dovremmo fare la codifica in modo tale che T2 comincia a fare il suo lavoro solo dopo che T1 ha segnalato che si è fatto con il suo lavoro. L'intervistatore mi ha chiesto se conoscevo le transazioni e come possiamo usarle per affrontare questa situazione di deadlock. Ho una certa esperienza di multithreading nell'interfaccia utente in winforms. Ma non ho mai usato le transazioni. Qualcuno può dirmi di più su questo o indicarmi un url/book,
@Ash Ottengo il punto di acquisire serrature nello stesso ordine. Ma, allora, cos'è questa cosa sulle transazioni? – Sandbox
@Sandbox, per me sembra che stiano parlando di una "transazione" nel senso generale di garantire che un gruppo di operazioni distinte siano eseguite come una (cioè atomicamente). Nel database questo viene ottenuto tramite la parola chiave Begin Transaction, in .net viene acquisita da (normalmente) usando l'istruzione lock. Ho aggiunto un libro altamente consigliato di Joe Duffy nella mia risposta. – Ash