Синхронизация потоков c#

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

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

Всем привет) Решил написать программу, которая в несколько потоков будет выкачивать торрент файлы с трекера, но возникла проблема - в какой-то момент все потоки могут зависнуть(ну или они подходят к зависанию, а я по последнему замечаю) Примерный алгоритм работы программы такой - сначала обрабатываются страницы и данные о торренте, который нужно выгрузить заносятся в очередь. Одновременно с этим запускаются m потоков, которые начинают выкачивать торренты постепенно опустошая очередь. Чтобы не происходило ошибок в момент считывания из очереди и проверки наличия там элементов очередь блокируется. Для блокировки использовал lock, monitor, mutex,но везде была проблема с зависанием. P.S.можете посоветовать как решить проблему?

Решение задачи: «Синхронизация потоков c#»

textual
Листинг программы
//Monitor.TryEnter(downloads,Timeout.Infinite);
                mtx.WaitOne();
                try
                {
                    if (downloads.Count != 0)
                    {
                        cur = downloads.Dequeue();
                    }
                    else
                    {
                        continue;
                    }
                }
                finally
                {
                    //Monitor.Exit(downloads);
                    mtx.ReleaseMutex();
                }

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


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

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

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