Как упорядочить вывод 3 потоков? - C#

Узнай цену своей работы

Формулировка задачи:

Существует три потока c тремя разными задачами, каждая из задач содержит непрерывный цикл:
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");
   }
}
Вопрос: Как сделать так, чтобы выводилось сообщение "1231231231...", то есть после выполнения итерации цикла в задании, поток останавливался, и выполнялась итерация в следующем потоке и так далее.

Решение задачи: «Как упорядочить вывод 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();
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы