Cómo se enfrenta Windows a los bloqueos?

Gracias por A2A.

(Nota para los lectores amables: Si aún no sabes qué es un deadlock de software, y cómo funcionan las APIs de Windows, esta respuesta va a ser muy confusa y poco útil.

Respuesta corta: Mal, por necesidad.

Respuesta más larga: Windows no tiene ninguna característica incorporada diseñada específicamente para comprobar los bloqueos en tiempo de ejecución. (Tenemos herramientas diseñadas para ayudar a los desarrolladores de controladores a diagnosticar los errores de bloqueo, ya que los controladores son donde suelen producirse los bloqueos; pero todavía no es algo que se ejecute en las máquinas de los usuarios finales.)

La razón básica de esto: Detectar de forma fiable un deadlock resulta ser lo mismo que resolver el problema de detención. Sí, Windows podría determinar potencialmente que dos hilos se están bloqueando mutuamente en este momento: que el hilo A tiene acceso de escritura exclusivo en el archivo 1 y está esperando en el archivo 2, y que el hilo B tiene acceso de escritura exclusivo en el archivo 2 y está esperando en el archivo 1. Pero muchos programas tienen protecciones antibloqueo propias, e incluso los programas que no las tienen pueden acabar escapando del bloqueo por otras razones. El hilo A o el hilo B pueden liberar su bloqueo en cualquier momento, o el hilo C puede llegar y forzar al hilo B a terminar, o el proceso que contiene al hilo A puede terminar por alguna otra razón. No hay manera de que Windows sepa si hay un verdadero bloqueo indefinido o simplemente uno temporal. Y mientras tanto, si Windows utilizara las estrategias estándar de resolución de bloqueos -romper el bloqueo de un hilo en uno de los recursos, o simplemente terminar uno de los hilos-, entonces lo que los usuarios ven es un comportamiento aleatorio, muy posiblemente incluyendo la pérdida de datos, con el fin de arreglar un bloqueo que puede no haber sido real en primer lugar.

En el software típico de Windows, los bloqueos son lo suficientemente raros que es contraproducente para Windows tratar con ellos con cualquier estrategia más sofisticada que "simplemente dejar que ambos hilos se queden ahí bloqueados hasta que uno de los programas se dé por vencido o el usuario venga y termine las tareas algo o simplemente reinicie el ordenador".