Multi-hilo programación de clase Learning Series --SemaphoreSlim

Ejemplo de código

//设置同时访问线程最大数量
static SemaphoreSlim _semaphore = new SemaphoreSlim(4);

static void AccessDatabase(string name, int seconds)
{
   Console.WriteLine($"{name} waits to access a database");
   _semaphore.Wait();
   Console.WriteLine($"{name} was granted an access to a database");
   Thread.Sleep(TimeSpan.FromSeconds(seconds));
   Console.WriteLine($"{name} is completed");
   _semaphore.Release();
}

static void Main(string[] args)
{
   for (int i = 1; i < 6; i++)
   {
       string threadName = $"Thread{i}";
       int secondsToWait = 2 + 2 * i;
       var t = new Thread(() => AccessDatabase(threadName, secondsToWait));
       t.Start();
   }
}

Resultados: El
Aquí Insertar imagen Descripción
principio
nuevo SemaphoreSlim un objeto, establezca el número máximo de hilos para acceder a la 4, 5 hilo abierto, encontraron inicia un hilo 5 que ha estado en un estado de espera hasta que el hilo 1 es, llame _semaphore.Release liberación completa (), el hilo 5 para ejecutar el código detrás.

Publicado 37 artículos originales · ganado elogios 3 · Vistas 6330

Supongo que te gusta

Origin blog.csdn.net/huan13479195089/article/details/88947313
Recomendado
Clasificación