Exemplo n.º 1
0
        static void Main(string[] args)
        {
            // creamos e iniciamos un hilo del método DemasiadosBloqueos el cual recibe
            // como parámetro los objetos bloqueo1 y 2
            object bloqueo1 = new object();
            object bloqueo2 = new object();

            new Thread(() => DemasiadosBloqueos(bloqueo1, bloqueo2)).Start();

            // bloqueamos esta sección de codigo usando como
            // objeto sincronizador el objeto bloqueo2
            // con la ayuda de monitor esperamos un tiempo para ver si podemos acceder al
            // objeto bloqueado

            lock (bloqueo2)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Monitor.TryEnter permite no quedarse atascado, retornado falso depuesta de que el timeout ha expirado");
                if (Monitor.TryEnter(bloqueo1, TimeSpan.FromSeconds(5)))
                {
                    Console.WriteLine("Desbloqueo del recurso exitoso");
                }
                else
                {
                    Console.WriteLine("Temporizador no se cumple!");
                }
            }


            Console.WriteLine("----");



            new Thread(() => DemasiadosBloqueos(bloqueo1, bloqueo2)).Start();

            // En este caso se causa una muerte del programa debido a que cada hilo
            // intenta acceder a un recurso bloqueado por el otro
            lock (bloqueo2)
            {
                Console.WriteLine("Aquí viene una muerte por bloqueo DEADLOCK");
                Thread.Sleep(1000);

                lock (bloqueo1)
                {
                    Console.WriteLine("Desbloqueo del recurso exitoso");
                }
            }
            var c  = new Contador();
            var t1 = new Thread(() => Prueba(c));
            var t2 = new Thread(() => Prueba(c));
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            //Instancia e inicializacion de los 3 hilos para contador
            Console.WriteLine("Contador Incorrecto");
            var c  = new Contador();
            var t1 = new Thread(() => Prueba(c));
            var t2 = new Thread(() => Prueba(c));
            var t3 = new Thread(() => Prueba(c));

            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();


            //Muestro los resultados obtenidos por el contador
            //lo que mostrara un resultado incorrecto al no estar bloqueado
            Console.WriteLine("Cuenta Total: {0}", c.Contar);
            Console.WriteLine("------");

            Console.WriteLine("Contador correcto");



            //Instancia e inicializacion de los 3 hilos para contadorConBloque
            var c1 = new ContadorConBloqueo();

            var t4 = new Thread(() => Prueba(c1));
            var t5 = new Thread(() => Prueba(c1));
            var t6 = new Thread(() => Prueba(c1));

            t4.Start();
            t5.Start();
            t6.Start();
            t4.Join();
            t5.Join();
            t6.Join();

            //Muestra los resultados esperados para este ejercicio el resiltado
            //correcto seria 0
            Console.WriteLine("Cuenta Total: {0}", c1.Contar);
            Console.WriteLine("------");

            Console.ReadLine();
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            // Creamos una nueva instacia del objeto Contador
            // Iniciamos los 3 hilos
            // con join se ejecutan los tres hilos antes de que continue el hilo principal

            Console.WriteLine("Contador Incorrecto");
            var c  = new Contador();
            var t1 = new Thread(() => Prueba(c));
            var t2 = new Thread(() => Prueba(c));
            var t3 = new Thread(() => Prueba(c));

            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();
            Console.WriteLine("Cuenta Total: {0}", c.Contar);

            Console.WriteLine("------");


            // Creamos y ejecutamos los hilos de forma similiar al codigo anterior
            // pero en este caso la claseSinBloqueo implementa los métodos de increment
            // y decrement de Interlock para poder acceder al recurso.

            Console.WriteLine("Contador correcto");

            var c1 = new ContadorSinBloqueo();

            t1 = new Thread(() => Prueba(c1));
            t2 = new Thread(() => Prueba(c1));
            t3 = new Thread(() => Prueba(c1));
            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();
            Console.WriteLine("Cuenta Total: {0}", c1.Contar);
            Console.WriteLine("------");
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            object bloqueo1 = new object();
            object bloqueo2 = new object();

            new Thread(() => DemasiadosBloqueos(bloqueo1, bloqueo2)).Start();
            lock (bloqueo2)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Monitor.TryEnter permite no quedarse atascado,retornado falso depuesta de que el timeout ha expirado");
                //Verificamos que no exita ningun bloqueo
                if (Monitor.TryEnter(bloqueo1, TimeSpan.FromSeconds(5)))
                {
                    Console.WriteLine("Desbloqueo del recurso exitoso");
                }
                else
                {
                    Console.WriteLine("Temporizador no se cumple!");
                }
            }


            Console.WriteLine("----");

            //Generamos los dos bloqueos para ver como trabaja el modo monitor

            new Thread(() => DemasiadosBloqueos(bloqueo1, bloqueo2)).Start();



            lock (bloqueo2)
            {
                Console.WriteLine("Aquí viene una muerte por bloqueo DEADLOCK");
                Thread.Sleep(1000);
                lock (bloqueo1)
                {
                    Console.WriteLine("Desbloqueo del recurso exitoso");
                }
            }
            var c  = new Contador();
            var t1 = new Thread(() => Prueba(c));
            var t2 = new Thread(() => Prueba(c));
        }
Exemplo n.º 5
0
        static void Main(string[] args)
        {
            // Creamos una nueva instacia del objeto Contador
            var c = new Contador();
            // Creamos tres hilos con el método Prueba
            // y le pasamos como parámetro el objeto c como referencia
            var t1 = new Thread(() => Prueba(c));
            var t2 = new Thread(() => Prueba(c));
            var t3 = new Thread(() => Prueba(c));

            // Iniciamos los 3 hilos
            // con join se ejecutan los tres hilos antes de que continue el hilo principal

            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();

            Console.WriteLine("Cuenta Total: {0}", c.Contar);
            Console.WriteLine("------");
            Console.WriteLine("Contador correcto");

            // Creamos y ejecutamos los hilos de forma similiar al codigo anterior
            // pero en este caso le pasamos como parámetro el objeto con el bloqueo

            var c1 = new ContadorConBloqueo();

            t1 = new Thread(() => Prueba(c1));
            t2 = new Thread(() => Prueba(c1));
            t3 = new Thread(() => Prueba(c1));
            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();
            Console.WriteLine("Cuenta Total: {0}", c1.Contar);
            Console.WriteLine("------");
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            //Instancia e inicializacion de los 3 hilos para contar sin bloqueo

            Console.WriteLine("Contador Incorrecto");
            var c  = new Contador();
            var t1 = new Thread(() => Prueba(c));
            var t2 = new Thread(() => Prueba(c));
            var t3 = new Thread(() => Prueba(c));

            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();
            Console.WriteLine("Cuenta Total: {0}", c.Contar);
            Console.WriteLine("------");
            Console.WriteLine("Contador correcto");

            //Instancia e inicializacion de los 3 hilos para contador con bloqueo

            var c1 = new ContadorConBloqueo();

            t1 = new Thread(() => Prueba(c1));
            t2 = new Thread(() => Prueba(c1));
            t3 = new Thread(() => Prueba(c1));
            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();
            Console.WriteLine("Cuenta Total: {0}", c1.Contar);
            Console.WriteLine("------");

            Console.ReadLine();
        }