¿Qué es la Sincronización entre Hilos?
La sincronización entre hilos es el proceso de garantizar que varios hilos accedan a los recursos compartidos de manera ordenada, evitando conflictos y asegurando que los datos no sean modificados simultáneamente de forma inconsistente.
¿Qué es la Comunicación entre Hilos?
La comunicación entre hilos permite que los hilos intercambien información, lo cual es esencial en muchas aplicaciones concurrentes. Se puede lograr mediante variables compartidas, colas de mensajes u otros mecanismos de comunicación inter-hilos.
Ejemplo de Sincronización en Python
Este código muestra cómo usar un candado (lock) para sincronizar el acceso a un recurso compartido entre varios hilos:
import threading
recurso_compartido = 0
lock = threading.Lock()
def tarea():
global recurso_compartido
with lock:
recurso_compartido += 1
print(f"Recurso compartido: {recurso_compartido}")
hilo1 = threading.Thread(target=tarea)
hilo2 = threading.Thread(target=tarea)
hilo1.start()
hilo2.start()
hilo1.join()
hilo2.join()
En este ejemplo, el candado asegura que solo un hilo pueda modificar el recurso compartido a la vez, evitando condiciones de carrera.
Ejemplo de Comunicación entre Hilos en Python
Este código muestra cómo usar una cola (queue) para comunicar datos entre hilos:
import threading
import queue
cola = queue.Queue()
def productor():
for i in range(5):
cola.put(i)
print(f"Producto {i} añadido")
def consumidor():
while True:
producto = cola.get()
if producto is None:
break
print(f"Producto {producto} consumido")
hilo_productor = threading.Thread(target=productor)
hilo_consumidor = threading.Thread(target=consumidor)
hilo_productor.start()
hilo_consumidor.start()
hilo_productor.join()
cola.put(None) # Señal de fin
hilo_consumidor.join()
En este ejemplo, un hilo productor agrega elementos a una cola, mientras que un hilo consumidor los procesa. La cola permite una comunicación segura entre hilos.
Conclusión
La sincronización y comunicación entre hilos son esenciales para evitar problemas de concurrencia y para crear aplicaciones robustas y eficientes en un entorno multihilo.