Análisis de ejemplo del método para evitar interbloqueos de Python
Este artículo es un análisis de ejemplo del método para evitar interbloqueos de Python. Compártelo con todos para tu referencia. El análisis específico es el siguiente:
Cuando dos o más subprocesos están esperando un recurso y los dos subprocesos se esperan entre sí, se produce un punto muerto.
En este artículo, el subproceso 1 espera a que el subproceso 2 libere el bloque y el subproceso 2 espera a que el subproceso 1 libere el bloque.
Principios para evitar un punto muerto:
1. Asegúrese de que los bloqueos se adquieran en un orden fijo, lo que en este caso significa adquirir un bloqueo primero y luego un bloque
2. Libere siempre los bloqueos en el orden inverso al de adquisición. En este caso, se debe liberar primero el bloque y luego el bloqueo.
import threading, time
a = 5
alock = threading.
block = threading.Lock()
def thread1calc():
imprime "thread1 adquiriendo el bloqueo a" p>
alock.acquire()
time.sleep(5)
imprime "hilo1 adquiriendo el bloqueo b"
block.acquire()
a =5
b =5
imprime "hilo1 liberando ambos bloqueos"
bloque .release()
alock .release()
def thread2calc():
imprime "thread2 adquiriendo el bloqueo b"
block.acquire()
tiempo .sleep (5)
imprime "thread2 adquiriendo bloqueo a"
alock.acquire()
tiempo.sleep(5)
a =10
b =10
imprime "thread2 liberando ambos bloqueos"
block.release()
alock.release ()
t = threading.Thread(target = thread1calc)
t.setDaemon(1)<
t.start() p>
t = threading.Thread(target = thread2calc)
t.setDaemon(2)<
t.start()
t = threading.Thread (objetivo = thread2calc)
t.setDaemon(2)<