Списки, профили и многопоточность

mdsdeal

Client
Регистрация
25.02.2022
Сообщения
252
Благодарностей
62
Баллы
28
Добрый день!

Не могу до конца разобраться, как работать с многопоточностью шаблона, как не допустить пересечений работы потоков с одним и тем же профилем одновременно.
Пример шаблона:
1) Создается профиль
2) Выполняются некоторые действия.
3) Профиль сохраняется
4) Путь до профиля сохраняется в txt файл.
Шаблон запускаем в 10 потоков. После выполнения имеем 10 профилей, 10 записей путей до профилей в txt файле.
Второй шаблон:
1) Из txt файла прошлого шаблона загружаем все записи (10 штук) в список
2) Из этого списка берем любую строку и удаляем ее из списка после взятия
3) Загружаем профиль по директории строки, взятой из списка
4) Делаем некоторые действия
5) Сохраняем профиль
Шаблон запускаем в 10 потоков. Пункт 2 второго шаблона - несколько потоков могут взять одну и ту же строку, и получится в дальнейшем так, что один профиль будет в нескольких инстансах использоваться. Как не допустить этого? А сделать, например, так, чтобы определенные действия шаблона в многопоточном режиме выполнялись не параллельно, а последовательно. Чтобы пункт 2 второго шаблона выполнялся так: все потоки доходят до пункта 2, останавливаются, поток 1 выполняет пункт 2, затем поток 2 выполняет пункт 2, затем поток 3 выполняет пункт 2 и т.д. до тех пор, пока все потоки последовательно не выполнят этот пункт, а затем все потоки продолжат работу в параллельном режиме.
 

ruthless

Client
Регистрация
13.02.2017
Сообщения
226
Благодарностей
67
Баллы
28
Я делаю так - перед взятием профиля выдерживаю рандомную паузу, например 1 - 60 секунд, далее проверяю существует ли файл (ибо если профиль подгрузился, я удаляю его с исходной папки) и потом соответственно беру в работу, если всё гуд.
 

mdsdeal

Client
Регистрация
25.02.2022
Сообщения
252
Благодарностей
62
Баллы
28
Я делаю так - перед взятием профиля выдерживаю рандомную паузу, например 1 - 60 секунд, далее проверяю существует ли файл (ибо если профиль подгрузился, я удаляю его с исходной папки) и потом соответственно беру в работу, если всё гуд.
А еще вопрос: переменные, как я понял, локальные для каждого потока, т.е. там своя "копия" переменной, а списки также для каждого потока локальные или глобальные для всего шаблона?
 

ruthless

Client
Регистрация
13.02.2017
Сообщения
226
Благодарностей
67
Баллы
28
А еще вопрос: переменные, как я понял, локальные для каждого потока, т.е. там своя "копия" переменной, а списки также для каждого потока локальные или глобальные для всего шаблона?
Если список привязан к файлу и стоит галочка внесения изменений, то глобально.
Если-же данные добавляются в список в процессе работы и список не привязан к файлу, то для конкретного потока.
 

mdsdeal

Client
Регистрация
25.02.2022
Сообщения
252
Благодарностей
62
Баллы
28
Если список привязан к файлу и стоит галочка внесения изменений, то глобально.
Если-же данные добавляются в список в процессе работы и список не привязан к файлу, то для конкретного потока.
Ясно, спасибо за ответ!
 

mdsdeal

Client
Регистрация
25.02.2022
Сообщения
252
Благодарностей
62
Баллы
28
Почитал несколько веток на форуме.
Оказывается в многопоточном режиме глобальные списки блокируются при начале работы с ними потоков, т.е. последовательная работа с ними потоков сделана по умолчанию автоматически.
Так ли это?
 

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