Как упорядочить вывод 3 потоков? - C#
Формулировка задачи:
Существует три потока c тремя разными задачами, каждая из задач содержит непрерывный цикл:
Вопрос: Как сделать так, чтобы выводилось сообщение "1231231231...", то есть после выполнения итерации цикла в задании, поток останавливался, и выполнялась итерация в следующем потоке и так далее.
Thread thread1 = new Thread(thread1Task);
Thread thread2 = new Thread(thread2Task);
Thread thread3 = new Thread(thread3Task);
void thread1Task(){
while(true){
//какой-то код...
//например:
Console.Write("1");
}
}
void thread2Task(){
while(true){
//какой-то код...
//например:
Console.Write("2");
}
}
void thread3Task(){
while(true){
//какой-то код...
//например:
Console.Write("3");
}
}Решение задачи: «Как упорядочить вывод 3 потоков?»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static EventWaitHandle ready1 = new AutoResetEvent(false);
static EventWaitHandle ready2 = new AutoResetEvent(false);
static EventWaitHandle ready3 = new AutoResetEvent(false);
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(Task1));
Thread t2 = new Thread(new ThreadStart(Task2));
Thread t3 = new Thread(new ThreadStart(Task3));
t1.Start();
t2.Start();
t3.Start();
ready1.Set();
Console.ReadLine();
}
static void Task1()
{
while (true)
{
ready1.WaitOne();
Console.WriteLine(1);
ready2.Set();
}
}
static void Task2()
{
while (true)
{
ready2.WaitOne();
Console.WriteLine(2);
ready3.Set();
}
}
static void Task3()
{
while (true)
{
ready3.WaitOne();
Console.WriteLine(3);
ready1.Set();
}
}
}
}