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