AutoResetEvent прокомментируйте код - C#

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

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

Написал программу в которой 2 потока используют общий ресурс-консоль. Программа поочередно выводит Тик так.
using System;
using System.Threading;
class Tik
{
    AutoResetEvent TakOn;
    AutoResetEvent TikOn;
    public Thread thrd;
    public Tik(string name, AutoResetEvent takon, AutoResetEvent tikon)
    {
        TakOn = takon;
        TikOn = tikon;
        thrd = new Thread(this.Run);
        thrd.Name = name;
        thrd.Start();
    }
    public void Run()
    {
        for (int i = 0; i < 25; i++)
        {
            Console.Write("Tuk ");
            TakOn.Set();
            TikOn.WaitOne();
        }
 
    }
}
class Tak
{
    AutoResetEvent TikOn;
    AutoResetEvent TakOn;
    public Thread thrd;
    public Tak(string name, AutoResetEvent tikon, AutoResetEvent takon)
    {
        TikOn = tikon;
        TakOn = takon;
        thrd = new Thread(this.Run);
        thrd.Name = name;
        thrd.Start();
    }
    public void Run()
    {
        for (int i = 0; i < 25; i++)
        {
            Thread.Sleep(2500);
            Console.WriteLine("Taaaaaaaak ");
            TikOn.Set();
            TakOn.WaitOne();
        }
    }
}
class Demo
{
    static void Main()
    {
        AutoResetEvent arrTik = new AutoResetEvent(false);
        AutoResetEvent arrTaak = new AutoResetEvent(false);
        Tik tk = new Tik("Tuk", arrTaak, arrTik);
        Tak tak = new Tak("Tak", arrTik, arrTaak);
        tk.thrd.Join();
        tak.thrd.Join();
 
        Console.ReadKey();
    }
Как использовать одно события что бы было так же?

Решение задачи: «AutoResetEvent прокомментируйте код»

textual
Листинг программы
using System;
using System.Threading;
 
namespace ConsoleApplication12
{
    class Program
    {
        static void Main(string[] args)
        {
            var tik = new TikTaker("tik");
            var tak = new TikTaker("tak");
            tik.Start();
            tak.Start();
            Console.ReadKey(true);
            tik.Stop();
            tak.Stop();
            Console.WriteLine("Stopped");
            Console.ReadKey(true);
        }
    }
 
    class TikTaker
    {
        static readonly AutoResetEvent ARE = new AutoResetEvent(true);
        static readonly Random r = new Random();
        public string Message { get; set; }
        private bool _work = true;
 
        public TikTaker(string message)
        {
            Message = message;
        }
 
        public void Start()
        {
           var  thread = new Thread(() =>
            {
                while (_work)
                {
                    ARE.WaitOne();
                    Console.WriteLine(Message);
                    Thread.Sleep(r.Next(200, 400));
                    ARE.Set();
                }
            });
            thread.Start();
        }
 
        public void Stop()
        {
            _work = false;
        }
    }
}

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


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

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

15   голосов , оценка 3.533 из 5