Yukikaze
26.12.2011, 06:22
Помогите пожалуйста, кто сталкивался с вложенными циклами в нескольких потоках?
У меня есть цикл:
while (!loginReader.EndOfStream)
{
username = loginReader.ReadLine();
while (!passwordReader.EndOfStream)
{
lock (locker)
{
pass = passwordReader.ReadLine();
}
log.loginer(username, pass);
main.linesInFile = main.linesInFile + 1;
}
}
который читает строку из первого файла, а потом перебирает все строки во втором. Так вот беда, в один поток это работает на ура, а когда делаю 5-10-15 в общем дофига потоков то цикл накрывается медным тазом, потому что каждый поток пытается взять из первого файла по строке.
Как сделать, что бы из первого файла строка бралась только один раз за цикл, а не умножалась на количество потоков?
ЗЫ Единственное решение которое пришло в голову это добавить ручками N пустых строк в второй фаил и N строк перед каждой строкой в первом О_о
ЗЗЫ И еще один не менее важный вопрос, как выйти из внутреннего цикла если фаил закончился?
while (!loginReader.EndOfStream)
{
username = loginReader.ReadLine();
while (!passwordReader.EndOfStream)
{
lock (locker)
{
pass = passwordReader.ReadLine();
}
log.loginer(username, pass);
main.linesInFile = main.linesInFile + 1;
if (passwordReader.EndOfStream)
{
passwordReader.DiscardBufferedData();
break;
}
}
}
Такой вариант не помогает
Добавлено через 1 час 39 минут
последний вопрос отменяется, какие то в другом месте...найти бы в каком :(
На счет многопоточности еще в силе
Добавлено через 2 часа 4 минуты
Нашел где косяк, кто объяснит, почему вложенный цикл не запускается повторно?
ЗЫ Я конечно догадываюсь, потому, что он закончился, но тогда как сбросить его на исходную позицию?
Добавлено через 2 часа 46 минут
Последнюю проблему решил иницализировав стримридер повторно
if (passwordReader.EndOfStream)
{
passwordReader = new StreamReader(BruteForm.dicBox1);
break;
}
У меня есть цикл:
while (!loginReader.EndOfStream)
{
username = loginReader.ReadLine();
while (!passwordReader.EndOfStream)
{
lock (locker)
{
pass = passwordReader.ReadLine();
}
log.loginer(username, pass);
main.linesInFile = main.linesInFile + 1;
}
}
который читает строку из первого файла, а потом перебирает все строки во втором. Так вот беда, в один поток это работает на ура, а когда делаю 5-10-15 в общем дофига потоков то цикл накрывается медным тазом, потому что каждый поток пытается взять из первого файла по строке.
Как сделать, что бы из первого файла строка бралась только один раз за цикл, а не умножалась на количество потоков?
ЗЫ Единственное решение которое пришло в голову это добавить ручками N пустых строк в второй фаил и N строк перед каждой строкой в первом О_о
ЗЗЫ И еще один не менее важный вопрос, как выйти из внутреннего цикла если фаил закончился?
while (!loginReader.EndOfStream)
{
username = loginReader.ReadLine();
while (!passwordReader.EndOfStream)
{
lock (locker)
{
pass = passwordReader.ReadLine();
}
log.loginer(username, pass);
main.linesInFile = main.linesInFile + 1;
if (passwordReader.EndOfStream)
{
passwordReader.DiscardBufferedData();
break;
}
}
}
Такой вариант не помогает
Добавлено через 1 час 39 минут
последний вопрос отменяется, какие то в другом месте...найти бы в каком :(
На счет многопоточности еще в силе
Добавлено через 2 часа 4 минуты
Нашел где косяк, кто объяснит, почему вложенный цикл не запускается повторно?
ЗЫ Я конечно догадываюсь, потому, что он закончился, но тогда как сбросить его на исходную позицию?
Добавлено через 2 часа 46 минут
Последнюю проблему решил иницализировав стримридер повторно
if (passwordReader.EndOfStream)
{
passwordReader = new StreamReader(BruteForm.dicBox1);
break;
}