Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Recetas.CSharp.Cap04.R0407
- {
- public class TicTac
- {
- public void Tic (bool enEjecucion)
- {
- lock (this)
- {
- if (!enEjecucion)
- {
- // Notifica a los threads en espera:
- Monitor.Pulse (this);
- return;
- }
- Thread.Sleep (1000);
- Console.Write ("Tic ");
- // Permite el paso de la ejecución del método Tac
- Monitor.Pulse (this);
- // ...y espera a que el método Tac termine:
- Monitor.Wait (this);
- }
- }
- public void Tac (bool enEjecucion)
- {
- lock (this)
- {
- if (!enEjecucion)
- {
- // Notifica a los threads en espera:
- Monitor.Pulse (this);
- return;
- }
- Thread.Sleep (1000);
- Console.WriteLine ("Tac");
- // Permite el paso de la ejecución del método Tic
- Monitor.Pulse (this);
- // ...y espera a que el método Tic termine:
- Monitor.Wait (this);
- }
- }
- }
- public sealed class TicTacPulse
- {
- public static TicTac ticTac;
- public static void IniciarReloj()
- {
- if (Thread.CurrentThread.Name.Equals ("Tic"))
- {
- // Repite el sonido tic 5 veces:
- for (int i = 1; i <= 5; ++i)
- {
- ticTac.Tic(true);
- }
- // Detiene el sonido tic:
- ticTac.Tic (false);
- }
- else
- {
- // Repite el sonido tac 5 veces:
- for (int i = 1; i <= 5; ++i)
- {
- ticTac.Tac (true);
- }
- // Detiene el sonido tac:
- ticTac.Tac (false);
- }
- }
- public static void Main()
- {
- ticTac = new TicTac();
- // Crea dos threads:
- Thread t1 = new Thread (IniciarReloj);
- t1.Name = "Tic";
- Thread t2 = new Thread (IniciarReloj);
- t2.Name = "Tac";
- t1.Start ();
- t2.Start ();
- t1.Join();
- t2.Join();
- Console.WriteLine ("\nEl reloj se ha detenido. Presione Enter.");
- Console.ReadLine ();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement