Синхронизация потоков 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();
}