работа с текстовым файлом при работе в несколько потоков?

Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Есть текст файл из которого берется первая строка с удалением, после отработки добавляется обратно в текст файл в конец.
Стоит счетчик который считает сколько строк было взято из текст файла, после определенного количества взятых строк, кубиком "Операции над списком" делаем перемешивание списка!
Список привязан!
При работе в многопотоке ошибок не будет?
То есть, если в многопотоке шаб возьмет из списка 50 строк при работе в 50 потоков, а в это время произойдет команда перемешать список, как шаб отработает?
Список перемешается, а строки которые были уже взяты, после перемешивания списка добавятся в конец списка?
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
923
Благодарностей
477
Баллы
63
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Работа над списком -> Взять строку -> Случайную строку
не так не пойдет!
если брать случайную строку, то придетя кидать отработавшие строки в другой список иначе выйдет одна строка была взята 100 раз, а какая то и ни разу!
Там список аков, нужно чтобы он брал по порядку, но после допустим отработки всех аков делал перемешивание, чтоб палева не было, что одни и те же аки паровозиком работают.
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 382
Благодарностей
467
Баллы
83
не так не пойдет!
Там список аков, нужно чтобы он брал по порядку, но после допустим отработки всех аков делал перемешивание, чтоб палева не было, что одни и те же аки паровозиком работают.
Бери строку с удалением, клади её в дополнительный список, если первый список пустой - по красной ветке перемешивай дополнительный, возвращай содержимое списка в исходный, временный очищай.
 
  • Спасибо
Реакции: masterLomaster
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Бери строку с удалением, клади её в дополнительный список, если первый список пустой - по красной ветке перемешивай дополнительный, возвращай содержимое списка в исходный, временный очищай.
точно а я сижу туплю! Спасибо БРО!
А если во много потоков, то первый поток который пойдет по красной это делать, остальные 49 потоков будут ждать? Успеет он все это сделать со списками, чтобы остальные 49 потоков по красной не пошли?
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Бери строку с удалением, клади её в дополнительный список, если первый список пустой - по красной ветке перемешивай дополнительный, возвращай содержимое списка в исходный, временный очищай.
и еще такая ситуация, работают 50 потоков, взято 50 строк, все строки кладем в другой список после отработки.
если первый список пустой - по красной ветке перемешивай дополнительный, возвращай содержимое списка в исходный, временный очищай.
один поток освобождается из 50 работающих и обнаружив пустой список идет по красной, обрабатывает списки и возвращает все обратно в начальный список. А остальные 49 потоков еще не отработали и не успели все сложить во второй список?
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 382
Благодарностей
467
Баллы
83
и еще такая ситуация, работают 50 потоков, взято 50 строк, все строки кладем в другой список после отработки.

один поток освобождается из 50 работающих и обнаружив пустой список идет по красной, обрабатывает списки и возвращает все обратно в начальный список. А остальные 49 потоков еще не отработали и не успели все сложить во второй список?
пускай проверяет количество строк во втором, пока 50 не наберётся - ничего не делает, и плюс, если ушёл по красной ветке - можно глобальной переменной сделать флаг (0/1 да/нет), что один поток уже занимается тем, чтобы перенести список обратно. Флаг будет включён - один поток ждёт 50 строк во втором файле, остальные потоки видят что флаг включён, сидят ждут, перемещать строки не пытаются, рабочий поток закончил перенос - флаг переключил обратно.
 
  • Спасибо
Реакции: masterLomaster

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 600
Баллы
113
и еще такая ситуация, работают 50 потоков, взято 50 строк, все строки кладем в другой список после отработки.

один поток освобождается из 50 работающих и обнаружив пустой список идет по красной, обрабатывает списки и возвращает все обратно в начальный список. А остальные 49 потоков еще не отработали и не успели все сложить во второй список?
что мешает класть строку во 2й список сразу после взятия?
 

Фермер

Client
Регистрация
05.05.2016
Сообщения
81
Благодарностей
9
Баллы
8
Вот самое простое что можно сделать, работает хоть 100 потоков и без велосипедов


И ничего перемешивать не надо, проверенно.
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 382
Благодарностей
467
Баллы
83
Вот самое простое что можно сделать, работает хоть 100 потоков и без велосипедов
И ничего перемешивать не надо, проверенно.
мб стоит прочитать внимательнее, что именно человеку надо сделать
 
  • Спасибо
Реакции: masterLomaster

Фермер

Client
Регистрация
05.05.2016
Сообщения
81
Благодарностей
9
Баллы
8
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
что мешает класть строку во 2й список сразу после взятия?
если акк еще не отработал смысл его ложить в другой список? Мне нужно именно после отработки делать манипуляции, иначе можно было просто брать случайную строку и пусть будет, что будет.
пускай проверяет количество строк во втором, пока 50 не наберётся - ничего не делает, и плюс, если ушёл по красной ветке - можно глобальной переменной сделать флаг (0/1 да/нет), что один поток уже занимается тем, чтобы перенести список обратно. Флаг будет включён - один поток ждёт 50 строк во втором файле, остальные потоки видят что флаг включён, сидят ждут, перемещать строки не пытаются, рабочий поток закончил перенос - флаг переключил обратно.
вот так наверное и нужно делать!
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Такую задачу так сложно решаете. Возьми и в конце текстового файла поставить разделитель словом "солнышко" например. И кидай все отработанное и стоящее перед строкой "солнышко" строки после этой строки или в самый конец списка, а как у тебя перед строкой ничего не будет, размешивай строки и перекидывай в конец слово "солнышко". И никаких 2 текстовых файлов не надо. Ну или можешь немного изменить мой вариант на проверку наличия слова в строке и перемешивание. Ну я думаю, ты разберешься итак уже :az:
 
  • Спасибо
Реакции: masterLomaster

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)