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 (); } } }