Необходимо синхронизировать потоки (написать свой 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("Все потоки успешно остановлены, после выполнения задач!!! "); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д