Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // OrtizOL - xCSw - http://ortizol.blogspot.com
- using System;
- using System.Threading;
- using System.Threading.Tasks;
- namespace Receta.Multithreading.R0207
- {
- public class UsoBarrier
- {
- public static void Main()
- {
- Console.WriteLine(Environment.NewLine);
- // Creación de objeto `Barrier` para la sincronziación de 3 threads:
- Barrier barrier = new Barrier(3, (x) => { Console.WriteLine("Punto de reunion de threads alcanzado."); });
- // Creación de objetos `Task` para asociar tareas de ejecución sobre el objeto
- // `Barrier`:
- Task t1 = Task.Factory.StartNew(() => Proceso(barrier, "Thread 1"));
- Task t2 = Task.Factory.StartNew(() => Proceso(barrier, "Thread 2"));
- Task t3 = Task.Factory.StartNew(() => Proceso(barrier, "Thread 3"));
- // A espera de que todas las tareas finalicen antes de
- // que el thread `Main` finalice:
- Task.WaitAll(t1, t2, t3);
- Console.WriteLine(Environment.NewLine);
- }
- public static void Proceso(Barrier barrier, string nombreThread)
- {
- for (int i = 1; i <= 3; ++i)
- {
- Console.WriteLine("{0} ANTES de la espera.", nombreThread);
- // Señal de registro una vez todos los threads finalicen:
- barrier.SignalAndWait();
- Console.WriteLine("{0} DESPUÉS de la espera.", nombreThread);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement