Junior — Middle
Explica qué es un semáforo y cómo se utiliza para gestionar la sincronización de hilos.
sobes.tech AI
Respuesta de la IA
Un semáforo es un primitive de sincronización que se utiliza para gestionar el acceso a un recurso compartido por varios hilos.
Contiene un contador que indica cuántos hilos pueden acceder al recurso simultáneamente.
- Si el contador es mayor que cero, el hilo puede entrar y disminuir el contador en 1.
- Si el contador es cero, el hilo se bloquea y espera a que otro hilo libere el recurso.
En C#, el semáforo se representa mediante la clase Semaphore o SemaphoreSlim.
Ejemplo de uso de SemaphoreSlim:
using System;
using System.Threading;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(2); // máximo 2 hilos simultáneamente
static void AccessResource(int id)
{
Console.WriteLine($"Hilo {id} espera acceso");
semaphore.Wait(); // solicitud de acceso
Console.WriteLine($"Hilo {id} obtuvo acceso");
Thread.Sleep(1000); // simulación de trabajo con el recurso
Console.WriteLine($"Hilo {id} libera el recurso");
semaphore.Release(); // liberación del recurso
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
En este ejemplo, no más de dos hilos pueden trabajar con el recurso al mismo tiempo, los demás esperan su turno.