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