Capacitación en diseño de pájaros Beida Jade: ¿Cómo evitar un punto muerto?
En la programación concurrente, el punto muerto de Yancheng Computer Training/Advice es un error lógico muy común.
Con métodos de programación correctos, no es difícil evitar el punto muerto.
Las cuatro condiciones necesarias para el punto muerto suelen introducirse en los libros de texto profesionales de informática.
Estas cuatro condiciones son indispensables, o mientras cualquiera de ellas sea destruida, el punto muerto es imposible.
Revisemos estas cuatro condiciones: Exclusión mutua: existe un recurso que solo se puede asignar a un hilo (también llamado hilo) en un momento determinado. Retener: cuando el recurso solicitado ya está ocupado; cuando el hilo está bloqueado, el ocupante del recurso no solo no necesita liberar el recurso, sino que también puede continuar solicitando más recursos Nopreemption: los recursos mutuamente excluyentes obtenidos por un hilo no pueden ser privados por la fuerza, en otras palabras, solo el recurso; el ocupante puede liberar el recurso; espera circular: varios subprocesos adquieren recursos mutuamente excluyentes en diferentes órdenes, lo que resulta en una situación de espera circular. Imagine una cadena circular de múltiples subprocesos, cada uno esperando que el siguiente subproceso libere los recursos que contiene.
No es difícil ver las condiciones necesarias para un punto muerto. Entre las cuatro condiciones necesarias para el punto muerto, la segunda, tercera y cuarta son relativamente fáciles de eliminar.
La segunda y tercera condiciones a menudo pueden eliminarse mediante la introducción de un mecanismo comercial. El método consiste en tratar todas las operaciones de bloqueo como transacciones y, una vez que comienza el bloqueo, garantizar que todas las operaciones se puedan revertir. Al mismo tiempo, el administrador de bloqueos puede detectar puntos muertos y privar de recursos (transacciones de reversión).
Este enfoque a veces genera una sobrecarga significativa y requiere más cambios en el modo de bloqueo.
Eliminar la cuarta condición es un enfoque más fácil y económico.
Específicamente, este método estipula que el orden de bloqueo debe ser consistente.
Específicamente, asignamos artificialmente un atributo de dirección a la cerradura, similar al "nivel del agua".
No importa qué bloqueos se mantengan, todas las operaciones de bloqueo del hilo deben realizarse en un orden consistente de menor a mayor (o de mayor a menor). Solo se permite un orden en un sistema.
Tenga en cuenta que el orden en el que se colocan los bloqueos no provoca un punto muerto.
En otras palabras, aunque parezca extraño bloquear en el orden de bloqueo A, bloquear B, poner A, luego poner B, siempre y cuando todos bloqueen en el orden de A y luego B, no provocar un punto muerto.
Solución: cuando utilice transacciones en 1, intente acortar el proceso de procesamiento lógico de la transacción y envíe o revierta la transacción lo antes posible (refine la lógica de procesamiento, ejecute una sección de lógica y luego retroceda o enviar y luego ejecutar otra lógica hasta que se envíe el asunto); 2. Establezca el parámetro de tiempo de espera de interbloqueo dentro de un rango razonable, como por ejemplo: 3 minutos-10 minutos, la operación se abandonará automáticamente para evitar el proceso; colgante;? 3. Optimice el programa, verifique y evite puntos muertos; Todos los scripts y SP deben probarse cuidadosamente antes de realizar la versión exacta.
5 ¿Todos los SP deberían tener manejo de errores (a través de @error)? 6 Generalmente no modifique el nivel predeterminado de las transacciones de SQLSERVER.
No se recomienda el bloqueo forzado. Otra solución de referencia: acceder a los objetos en el mismo orden. Si todas las transacciones simultáneas acceden a los objetos en el mismo orden, se reducirá la posibilidad de un punto muerto.
Por ejemplo, si dos transacciones simultáneas adquieren un bloqueo en la tabla de proveedores y luego un bloqueo en la tabla de piezas, hasta que se complete una de las transacciones, la otra transacción se bloquea en la tabla de proveedores.
Después de que la primera transacción se confirma o se revierte, la segunda transacción continúa.
No se producirá ningún punto muerto.
El uso de procedimientos almacenados para todas las modificaciones de datos puede estandarizar el orden en el que se accede a los objetos.