Необходимо синхронизировать потоки (написать свой ThreadPool) - C#

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

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

Надо написать свой ThreadPool. Идея начальная проста: есть очередь задач, которая подаётся на съедение потокам, всё инкапсулируется в классе MyThreadPool, который имеет метод добавление в очередь, из него должен поступать сигнал, что элемент добавлен
public void EndMyThreadPool()
        {
            foreach(MyThread a in mythreads)
            {
                a.EndThreads();//это не так важно, в семантике можно не рассматривать
                Console.WriteLine("поток корректно остановлен, его задача выполнена!!");
            }
            Console.WriteLine("Все потоки успешно остановлены, после выполнения задач!!! ");
        }
сам метод исполнения задачи, для одного потока
void Execute()
        {
            while (!end)//можно понимать, что здесь просто true, так как к вопросу это не имеет отношения
            {
                Console.WriteLine("Я ищу еду");
                wait.WaitOne();
                if (queue_of_task.Count > 0)
                {
                    wait.ReleaseMutex();
                    Console.WriteLine("еда есть");
                    //wait.WaitOne();
                    Console.WriteLine("можно поесть");
                    wait.WaitOne();
                    var task = queue_of_task.Dequeue();
                    wait.ReleaseMutex();
                    Console.WriteLine("количство задач:  " + queue_of_task.Count);
                    Thread.Sleep(100);
                   // wait.ReleaseMutex();
                    task.Start();
                   // wait.ReleaseMutex();
                    Console.WriteLine("Задача выполнена!");
                }
                else
                {
                    wait.ReleaseMutex();
                    Console.WriteLine("Я хочу есть");
                    wait.WaitOne();
                    /*while (queue_of_task.Count <= 0)
                    {//всё работает с этим закомент циклом, но надо, чтобы поступал сигнал, а не этот ужас
                    }*/
                }
            }
        }
перепробовал кучу средств синхронизации, помогите советом.

Решение задачи: «Необходимо синхронизировать потоки (написать свой ThreadPool)»

textual
Листинг программы
        public void EndMyThreadPool()
        {
            foreach(MyThread a in mythreads)
            {
                a.EndThreads();
                Console.WriteLine("поток корректно остановлен, его задача выполнена!!");
            }
            Console.WriteLine("Все потоки успешно остановлены, после выполнения задач!!! ");
        }

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


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

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

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