Mutex en Python

Ishaan Shrivastava 22 octubre 2021
Mutex en Python

Mutex significa Exclusión Mutua. Significa que en un momento específico dado, solo un hilo puede usar un recurso en particular. Si un programa tiene varios subprocesos, la exclusión mutua restringe los subprocesos para usar ese recurso en particular simultáneamente. Bloquea los otros hilos y restringe su entrada en la sección crítica.

Este tutorial demostrará el uso de mutex en Python.

Para implementar mutex en Python, podemos usar la función lock() del módulo threading para bloquear los hilos. Si el segundo hilo está a punto de terminar antes que el primer hilo, esperará a que termine el primer hilo. Bloqueamos el segundo hilo para asegurar esto, y luego lo hacemos esperar a que termine el primer hilo. Y cuando el primer hilo está terminado, liberamos el bloqueo del segundo hilo.

Consulte el código que se proporciona a continuación.

import threading
import time
import random

mutex = threading.Lock()


class thread_one(threading.Thread):
    def run(self):
        global mutex
        print("The first thread is now sleeping")
        time.sleep(random.randint(1, 5))
        print("First thread is finished")
        mutex.release()


class thread_two(threading.Thread):
    def run(self):
        global mutex
        print("The second thread is now sleeping")
        time.sleep(random.randint(1, 5))
        mutex.acquire()
        print("Second thread is finished")


mutex.acquire()
t1 = thread_one()
t2 = thread_two()
t1.start()
t2.start()

Producción :

The first thread is now sleeping
The second thread is now sleeping
First thread is finished
Second thread is finished

En este código, el segundo subproceso no se libera hasta que se realiza el primer subproceso. El segundo hilo espera al primer hilo en la cerradura. La palabra clave global se usa en el código porque ambos subprocesos la usan. Tenga en cuenta que la instrucción print viene inmediatamente después de la instrucción acquire, no antes, porque mientras el hilo esté esperando, aún no ha terminado.

Por lo tanto, es muy importante bloquear los hilos. De lo contrario, puede bloquear la aplicación si dos subprocesos comparten el mismo recurso simultáneamente.