Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Recetas.Multithreading.R0203
- {
- public sealed class AccesoBaseDatosConSemaphoreSlim
- {
- // Creación de instancia de `SemaphoreSlim` para controlar el
- // límite de threads = 4:
- public static SemaphoreSlim _ss = new SemaphoreSlim(4);
- public static void Main()
- {
- Console.Title = "=== Demostración Uso SemaphoreSlim ===";
- Console.WriteLine();
- // Creación de 6 threads:
- for (int i = 1; i <= 6; ++i)
- {
- string nombreThread = String.Format("T{0}", i.ToString());
- int tiempoEspera = 2 + 2 * i;
- Thread nuevoThread = new Thread( () => AccederBaseDatos(nombreThread, tiempoEspera));
- // Inicio de ejecución de thread:
- nuevoThread.Start();
- }
- Console.WriteLine();
- }
- // Método que simula el control del acceso concurrente de threads
- // a una base de datos:
- public static void AccederBaseDatos(string nombreThread, int segundos)
- {
- Console.WriteLine ("Thread `{0}` debe espear para acceder a la base de datos.", nombreThread);
- _ss.Wait();
- Console.WriteLine ("Thread `{0}` tiene ahora acceso a la base de datos.", nombreThread);
- // Simula operaciones transaccionales o de consulta sobre la base de datos:
- Thread.Sleep(TimeSpan.FromSeconds(segundos));
- Console.WriteLine("Thread `{0}` ha finalizado su ejecución", nombreThread);
- // Continua la ejecución:
- _ss.Release();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement