Created
April 9, 2015 23:51
-
-
Save Fhernd/05abb07d33af76e21a84 to your computer and use it in GitHub Desktop.
Demostración de uso de la clase SemaphoreSlim en C#.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment