Я тоже думал примерно так же. Но пришел к выводу что метод не сильно универсальный при много-поточности
Насколько я понял, то задача такая: Есть 2 шаба, 1-й в конце своей работы должен ребутнуть интернет. Но он должен подождать пока отработает 2-й шаб до конца, а не вырубить инет среди работы 2-го шаба. 2-й шаб должен работать и добавлять потоки пока не увидит, что скоро должен ребутнуться инет. Как только он овидит, что инет должен ребутнуться - перестать запускать новые потоки и подождать.
Если бы я решал такую задачу, я бы остановился на таком варианте:
- Создаем папку lock (она нужна что-бы скидывать туда "системные файлы")
- запускаем 1-й шаб
- он работает пока не доходит до екшена перезагрузки инета. Как только он дошел до этого экшена - он создает файлик (например need_inet_reboot) и сканирует папку lock на наличие файлов. Если там есть файлы - он ждет нное время и возвращается обратно к проверке файлов в папке lock. Если в папке lock нет файлов - ребутает инет.
Потом ждет пока инет появится (например пингует гугл). Когда инет появился - удаляет файлик need_inet_reboot
- запускаем 2-й шаб
- второй шаб проверяет есть ли файлик need_inet_reboot, если есть - ждет нное время и опять проверяет. Если же этого файла нет - создает файлик lock_id133564678(уникальный для каждого потока) в папке lock и делает свои дела. Как только он все дела сделал - удаляет свой файл lock_id1346e5656789 (я бы добавил и good end и bad end в шаб и у них вставил екшн удаления файлика блокировки, а то если файлик вдруг не удалится - то инет не ребутнется)
По идее должно работать железно при 1-м потоке первого шаба и n потоков второго шаба
Если надо делать много потоков 1-го шаба, то тогда надо перед екшном создания файла need_inet_reboot вставить проверку есть ли такой файл (его мог создать какой-то другой поток). Если уже есть - то заново не создаем и инет в этом потоке не вырубаем - об этом позаботится другой поток
Вот как-то так)