Middle+
¿Qué es un primitivo de sincronización Semaphore?
sobes.tech AI
Respuesta de la IA
Semaphore — es un primitivo de sincronización que controla el acceso a un conjunto limitado de recursos. Mantiene un contador que determina cuántos hilos pueden acceder simultáneamente al recurso.
Operaciones principales:
WaitOne(oWaitAsyncpara código asíncrono): Disminuye el contador si es mayor que cero. Si el contador es cero, el hilo se bloquea hasta que el contador sea positivo (otro hilo llama aRelease).Release: Incrementa el contador y puede desbloquear al hilo en espera.
Tipos de Semaphore:
Semaphore: Sistema (con nombre o sin nombre), puede usarse entre procesos.SemaphoreSlim: Implementación ligera, diseñada para usarse dentro de un proceso. Preferible para sincronización intra-proceso.
Ejemplo de uso de SemaphoreSlim:
// semaphoreSlim puede usarse para limitar el acceso simultáneo a un recurso
// En este caso, se permite 2 hilos a la vez
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Espera a que se libere el semáforo
await semaphoreSlim.WaitAsync();
try
{
// Acceso a recurso limitado
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} accediendo al recurso");
await Task.Delay(1000); // Simulación de trabajo con el recurso
}
finally
{
// Libera el semáforo
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} liberando el recurso");
semaphoreSlim.Release();
}
}