post

Semáforo

semáforo photo of person riding kayak during dawn
Photo by Taryn Elliott on Pexels.com

Semáforo son una herramienta versátil en programación concurrente, proporcionando mecanismos efectivos para controlar el acceso a recursos compartidos y coordinar la ejecución de hilos, lo que contribuye a la escritura de programas concurrentes seguros y eficientes.

Aquí tienes un ejemplo simple de cómo se pueden utilizar semáforos en Python, utilizando la biblioteca threading

import threading
import time

# Crear un semáforo binario (inicializado en 1)
sem = threading.Semaphore(1)

# Variable compartida
contador = 0

# Función para incrementar el contador
def incrementar():
    global contador
    sem.acquire()  # Operación wait
    try:
        for _ in range(1000000):
            contador += 1
    finally:
        sem.release()  # Operación signal

# Crear dos hilos que incrementan el contador
hilo1 = threading.Thread(target=incrementar)
hilo2 = threading.Thread(target=incrementar)

# Iniciar los hilos
hilo1.start()
hilo2.start()

# Esperar a que ambos hilos terminen
hilo1.join()
hilo2.join()

# Imprimir el valor final del contador
print("Valor final del contador:", contador)

En este ejemplo, se crea un semáforo binario (sem) con un valor inicial de 1. La función incrementar representa una sección crítica donde se incrementa la variable contador. Antes de entrar en la sección crítica, se adquiere el semáforo (sem.acquire()), y después de salir de la sección crítica, se libera el semáforo (sem.release()).

La operación acquire actúa como la operación wait, y release actúa como la operación signal. Estas operaciones aseguran que solo un hilo pueda ejecutar la sección crítica a la vez, logrando exclusión mutua y evitando condiciones de carrera.

Leave a Reply

Your email address will not be published. Required fields are marked *