using System;
using System.Threading;
namespace Recetas.CSharp.Cap04.R0407
{
public class BlogxCSw
{
// Representa el número de threads máximos
// soportados por el servidor:
private const int threads = 3;
// Representa la cantidad de usuarios que
// se van a conectar al blog:
private const int usuarios = 20;
// Representa el locker que se encarga de
// controlar el acceso al blog:
private static Object locker = new Object();
// Permite a un usuario ingresar al usuario:
public static void IngresarAlBlog()
{
while (true)
{
lock (locker)
{
Monitor.Wait (locker);
}
Console.WriteLine ("{0} accedió al Blog xCSw",
Thread.CurrentThread.Name
);
Thread.Sleep (150);
}
}
public static void Main()
{
// Creación del pool de threads:
Thread[] pool = new Thread[threads];
// Creación de cada uno de los threads:
for (int i = 0; i < threads; ++i)
{
pool[i] = new Thread (new ThreadStart (IngresarAlBlog));
pool[i].Name = String.Format ("Usuario {0}", (i + 1).ToString() );
pool[i].IsBackground = true;
pool[i].Start();
}
// Atienda las visitas al blog:
for (int i = 1; i <= usuarios; ++i)
{
Thread.Sleep (1000);
lock (locker)
{
Monitor.Pulse (locker);
}
}
Console.WriteLine ();
}
}
}