как сделать lock подпроекта?

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
Ситуация следующая. Есть проект, который может выполняться только в один поток, но запустить его захотят сразу много разных проектов. Как поставить их в очередь?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Хз. Если подключить мозги, то на ум приходит использование костыля:
Во всех шаблонах подключаем список с привязкой к одному и тому же файлу. По умолчанию файл-список пустой.
Перед запуском проекта родительскими проектами надо писать в этот список одну строку. После окончания использования этого под-проекта удалять эту строку.
И в свою очередь добавить проверку еще перед этим шагом в родительском шаблоне на наличии строк в списке: если строк нет, то загружаем под-шаблон, если строка есть, то в цикле выжидаем паузу в пару секунд., потом повторно проверяем список, и запускаем его только в том случае, когда попадаем на момент когда в нем нет строк.

Но здесь возникает проблема организации очередности доступа к проекту родительскими проектами (так называемая очередь «стека»), то есть если очень много родительских проектов будут ждать в очереди, то следующим в обработку шаблон запустит рандомный родительский проект, а не тот кто первым очередь бронировал.
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
спасибо. я думал над этим методом. реально костыль ))
Вообще, я надеялся на что-то типа lock-а кода, неведомой волшебной таблетки, про которую пока не знаю. )
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
допустим даже, что я создам объект для Лока. Но как его увязать с разными шабами? Объект же создается один раз. Насколько я понимаю, хотя до сих пор каша в голове по этому вопросу.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Не встречал на форуме активного использования режима "проект в проекте" на C# коде, поэтому сомневаюсь что там корректно lock получиться реализовать. Но я в C# здесь слаб, может кто из тру-кодеров подкинет решение потом.
 

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
если что, то метод Mutex не подходит. нужна возможность нескольких потоков "на всякий"
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93
Как вариант запускать не "проект в проекте", а добавлять шаб в зенку и вызывать AddTries..
Т.е. шаблон автономен и работает с файлами/данными/бд. По команде из шабов запускается, проверяет наличие заданий для себя из бд/файлов/etc исполняет что надо и завершается.
Шабы добавляют задание в бд/файлы, добавляют шабу +1/10/1000 исполнений (сколько надо столько и добавляют) и в цикле проверяют его исполнения, как завершилось (у меня шаб исполнитель ставит отметку в поле в бд) - продолжают свою работу.

Таким образом шаб-исполнитель можно настраивать прямо из зенки указав кол-во единовременных потоков исполнения, а шабы которым от исполнителя нужна работа - добавляют ему заданий и кол-во запусков.
Удобно, понятно и легко контролируется.
 
  • Спасибо
Реакции: orka13

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
вариант, но тут удобно тем, что идет передача всего контекста в подпроект, а это важно.

Мы именно отдаем переменные и обрабатываем в подпроекте их, но в том же окружении, что и основной шаб. Как будто все делает один человек и последовательно. Я не знаю как это сделать другим способом.
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

linkod

Пользователь
Регистрация
11.10.2018
Сообщения
118
Благодарностей
1
Баллы
16
я нашел класс System.Threading.Semaphore

есть у кого-нибудь либы с ним для зенки?
 

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