Ho letto diversi articoli e post che dicono che lock(this)
, lock(typeof(MyType))
, lock("a string")
sono tutte cattive pratiche perché un altro thread potrebbe bloccare la stessa chiave e causare un deadlock. Per capire questo problema, stavo cercando di creare un codice di esempio per illustrare la situazione di stallo, ma non sono stato in grado di comprendere ciò.Esempio di codice per illustrare un deadlock utilizzando il blocco (this)
Qualcuno può scrivere un breve bit di codice che illustra questo problema classico? Per favore, tienilo breve, posso digerire il codice solo in blocchi più piccoli.
Modifica: Penso che lassevk lo riassuma bene; il vero problema è che hai perso il controllo delle tue serrature. Quando ciò accade, non puoi controllare l'ordine in cui vengono chiamati i blocchi e stai consentendo una potenziale situazione di deadlock.
lock(this)
, lock(typeof(MyType))
, ecc. Sono tutte situazioni in cui è stato scelto un blocco impossibile da controllare.
aha, stavo scrivendo esattamente lo stesso campione mentre lo hai postato :) ma ho scelto long e int – Maghis
Ottimo esempio: un elemento chiave nella creazione di un deadlock è il blocco su due risorse in ** DIFFERENT ** ordini. –
Sì, questo è il principio su cui vengono costruite tecniche come il blocco livellato e perché sono molto efficaci per evitare i deadlock. – Maghis