En Java, las causas del punto muerto son (¿qué es un punto muerto en Java?)
Deadlock es la abreviatura de interbloqueo de procesos, propuesta por primera vez por Dijkstra en 1965 cuando estudiaba el algoritmo bancario. Es uno de los problemas más difíciles de abordar en los sistemas operativos de computadoras e incluso en la programación concurrente. De hecho, el problema del punto muerto no sólo existe en los sistemas informáticos, sino que también existe ampliamente en nuestra vida diaria.
1. ¿Qué es un punto muerto?
Primero veamos un ejemplo de la vida: hay un puente en un río con una plataforma estrecha que solo puede acomodar un automóvil. incapaz de hacer que dos autos corran paralelos. Si dos automóviles A y B ingresan al puente desde ambos extremos del puente, entonces para el automóvil A, ha recorrido una sección de la carretera en el lado izquierdo del puente (es decir, ocupa parte de los recursos del puente). Debe esperar a que el auto B ceda paso al puente de la derecha. En este momento, el auto A no puede avanzar por el auto B, ha caminado un tramo del lado derecho del puente (es decir, ocupa parte de; los recursos del puente), y debe esperar para cruzar el puente. El automóvil A da paso a la plataforma del puente a la izquierda y el automóvil B no puede avanzar en este momento. Los autos de ambos lados no retroceden, por lo que esperan a que los demás den paso al puente, pero si nadie cede, esperarán sin cesar. Este fenómeno es un punto muerto. Si se compara el automóvil con un proceso y la plataforma del puente es un recurso, entonces el problema anterior se puede describir de la siguiente manera: el proceso A ocupa el recurso R1 y está esperando el recurso Rr ocupado por el proceso B; el proceso B ocupa el recurso Rr y está esperando; para el recurso R1 ocupado por el proceso A. Además, los recursos R1 y Rr solo pueden ser ocupados por un proceso, es decir, no se permite que dos procesos los ocupen al mismo tiempo. Como resultado, ninguno de los procesos puede continuar ejecutándose. Si no se toman otras medidas, esta situación de espera cíclica continuará indefinidamente y se producirá un punto muerto en el proceso.
En los sistemas informáticos, pueden producirse interbloqueos que involucran recursos de software y hardware. Por ejemplo: solo hay una unidad de CD-ROM y una impresora en el sistema. Un determinado proceso ocupa la unidad de CD-ROM y se aplica a la impresora; otro proceso ocupa la impresora y también se aplica al CD-ROM. Como resultado, ambos procesos quedan bloqueados y nunca podrán desbloquearse por sí solos.
El llamado punto muerto se refiere a una situación en la que múltiples procesos esperan en un bucle recursos ocupados entre sí y permanecen bloqueados indefinidamente. Obviamente, si no hay una fuerza externa, entonces cada proceso involucrado en el punto muerto siempre estará en un estado bloqueado. Como puede verse en los ejemplos anteriores, la causa fundamental de los interbloqueos en los sistemas informáticos son los recursos limitados y el funcionamiento inadecuado. Es decir: una razón es que los recursos proporcionados por el sistema son muy pocos, lo que está lejos de satisfacer las necesidades de recursos de los procesos concurrentes. El punto muerto causado por este tipo de competencia por los recursos es el núcleo de lo que queremos discutir. Por ejemplo: el mensaje es un recurso temporal. En un momento determinado, el proceso A está esperando un mensaje del proceso B, el proceso B está esperando un mensaje del proceso C y el proceso C está esperando un mensaje del proceso A. Antes de que llegue el mensaje, los tres procesos A, B y C no pueden avanzar y también se producirá un punto muerto en la comunicación del proceso. Otra razón es el punto muerto causado por un orden de avance del proceso inadecuado. Es posible que pocos recursos no necesariamente causen un punto muerto. Al igual que dos personas cruzando un puente de una sola tabla, si ambas personas tienen que cruzar primero y quedan atrapadas en el puente de una sola tabla y se niegan a retirarse, inevitablemente se producirá un punto muerto debido a la competencia por los recursos; sin embargo, si dos personas verifican primero; para ver si hay alguien al otro lado antes de subir al puente. En el puente, solo subes al puente cuando no hay otra persona en el puente, entonces el problema está resuelto. Por lo tanto, si el diseño del programa no es razonable y el orden de avance del proceso es inadecuado, también se producirá un punto muerto.
2. Condiciones necesarias para el punto muerto
Del análisis anterior, se puede ver que si las siguientes cuatro condiciones necesarias se cumplen simultáneamente en el sistema informático, se producirá un punto muerto. En otras palabras, mientras no se cumpla una de las siguientes cuatro condiciones, el sistema no se bloqueará.
<1>Condiciones mutuamente excluyentes. Es decir, un recurso solo puede ser ocupado por un proceso dentro de un período de tiempo y no puede ser ocupado por dos o más procesos al mismo tiempo. Dichos recursos exclusivos, como unidades de CD-ROM, impresoras, etc., deben ser liberados activamente por el proceso que ocupa el recurso antes de que otros procesos puedan ocupar el recurso. Esto está determinado por las propiedades del propio recurso. Por ejemplo, un puente de una sola tabla es un recurso exclusivo y personas de ambas partes no pueden cruzar el puente al mismo tiempo.
<2>Condición de no preferencia.
Antes de que se agote el recurso obtenido por el proceso, el solicitante del recurso no puede apoderarse por la fuerza del recurso del propietario del recurso, sino que solo puede ser liberado por el proceso del propietario del recurso. Por ejemplo, las personas que cruzan un puente de una sola tabla no pueden obligar a la otra persona a retirarse, ni pueden empujar ilegalmente a la otra persona fuera del puente. La persona en el puente debe cruzar el puente por sí misma y abandonar el tablero del puente (es decir, liberar activamente los recursos ocupados), para que la otra persona pueda cruzar el puente.
<3>Condiciones de posesión y aplicación. El proceso ya ocupa al menos un recurso, pero solicita un nuevo recurso; porque el recurso ya está ocupado por otro proceso, el proceso está bloqueado en este momento, sin embargo, continúa ocupando el recurso ocupado mientras espera el nuevo recurso; Tomando como ejemplo cruzar un puente de una sola tabla, dos personas A y B se encuentran en el puente. A ha recorrido una sección del puente (es decir, ha ocupado algunos recursos) y necesita recorrer el resto del puente (solicitando nuevos recursos), pero esa parte del puente está ocupada por B (B ha recorrido un sección del puente). A no puede pasar, no puede avanzar y no puede retroceder; B también se encuentra en la misma situación.
<4>Condición de espera del bucle. Existe una secuencia de espera de proceso {P1, P2,...,Pn}, en la que P1 espera un determinado recurso ocupado por P2, P2 espera una determinada fuente ocupada por P3,..., y Pn espera una determinada fuente. recurso ocupado por P1 Ocupar un determinado recurso forma un bucle de proceso. Al igual que en el problema anterior de cruzar un puente de una sola tabla, A espera el tablero del puente ocupado por B y B espera el tablero del puente ocupado por A, esperándose así en un bucle.
Las cuatro condiciones que mencionamos anteriormente ocurrirán simultáneamente durante un punto muerto. En otras palabras, mientras no se cumpla una condición necesaria, se puede eliminar el punto muerto.
8.2 Prevención del punto muerto
Las cuatro condiciones necesarias para que se produzca el punto muerto se han introducido anteriormente. Siempre que se destruya cualquiera de estas cuatro condiciones necesarias, no se producirá el punto muerto. . Esto nos brinda la posibilidad de resolver el problema del punto muerto. Generalmente, los métodos para resolver un punto muerto se dividen en tres tipos: prevención, evitación, detección y recuperación de punto muerto (nota: la detección y recuperación de punto muerto son el mismo método). Los presentaremos por separado a continuación.
La prevención de interbloqueo es una estrategia para garantizar que el sistema no entre en un estado de interbloqueo. Su idea básica es exigir que un proceso siga un determinado protocolo al solicitar recursos, rompiendo así una o más de las cuatro condiciones necesarias para el punto muerto y garantizando que el sistema no entre en un estado de punto muerto.