Come fa Windows a gestire i deadlock?

Grazie per A2A.

(Nota per i gentili lettori: Se non sapete già cos'è un deadlock software, e come funzionano le API di Windows, questa risposta sarà molto confusa e inutile.)

Risposta breve: Poco, per necessità.

Risposta più lunga: Windows non ha alcuna funzione integrata specificamente progettata per controllare i deadlock in fase di esecuzione. (Abbiamo strumenti progettati per aiutare gli sviluppatori di driver a diagnosticare i bug di deadlock, dato che i driver sono dove i deadlock si verificano di solito; ma non è ancora qualcosa che gira sulle macchine degli utenti finali: Rilevare in modo affidabile un deadlock risulta essere lo stesso che risolvere il problema di halting. Sì, Windows potrebbe potenzialmente determinare che due thread si stanno bloccando a vicenda al momento - che il thread A ha accesso esclusivo in scrittura sul file 1 e sta aspettando sul file 2, e che il thread B ha accesso esclusivo in scrittura sul file 2 e sta aspettando sul file 1. Ma molti programmi hanno protezioni anti-deadlock proprie, e anche i programmi che non le hanno possono finire per sfuggire al deadlock per altre ragioni. Il thread A o il thread B potrebbero rilasciare il loro blocco in qualsiasi momento, o il thread C potrebbe arrivare e forzare il thread B a terminare, o il processo che contiene il thread A potrebbe terminare per qualche altra ragione. Non c'è modo per Windows di sapere se c'è un vero, indefinito deadlock o semplicemente uno temporaneo. E nel frattempo, se Windows ha usato strategie standard di risoluzione dei deadlock - rompendo il blocco di un thread su una delle risorse, o semplicemente terminando uno dei thread - allora quello che gli utenti vedono è un comportamento casuale, molto probabilmente includendo la perdita di dati, al fine di risolvere un deadlock che potrebbe non essere stato reale in primo luogo.

Nel tipico software di Windows, i deadlock sono abbastanza rari che è controproducente per Windows affrontarli con qualsiasi strategia più sofisticata di "lascia semplicemente che entrambi i thread rimangano bloccati finché uno dei programmi si arrende o l'utente arriva e termina qualcosa o semplicemente riavvia il computer"