@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
Помогите с логикой: выполнение функции любым, но только одним потоком
-
Всем привет!
Ломаю голову над одной задачкой. Как оптимальнее всего продумать логику, чтобы при многопотоке каждая функция выполнялась любым потоком, но только одним?
Допустим, есть у нас в Main вызов 123 функций и скрипт работает в 17 потоков (цифры сугубо для примера). Как сделать так, чтобы в каждую функцию мог зайти только один поток, но без привязки к его индексу?
Думал уже про какие-то флаги в глобальных переменных, но так этот пазл в голове и не сложился.
Был бы признателен за любые советы!
-
@UA делаем глобальную переменную с значением 0, потом условие если эта переменная == 0 - вызов функции, на страте функции сразу увеличиваем переменную. Желательно что бы при этом потоки запускались с паузой между друг другом.
ПС. на каждую функцию своя переменная -
@gaget007, так я хотел делать изначально, но это совсем не универсально. Поэтому и решил искать вариант без привязки к индексам (номерам потоков).
@DrPrime, вот о чём-то таком как раз и думал, но здесь отталкивает необходимость плодить кучу переменных и есть риск, что всё равно в функцию зайдёт больше потоков, чем один.
Эх, видимо, простого решения здесь не придумать :)
В любом случае, спасибо за ответы!
-
-
@UA У меня в скрипте реализовано так. If
[[THREAD_INDEX]] == 1, а в нём уже функции которые через глобальные переменные управляют всем скриптом. Например первый поток читает reboot.txt (или get-запрос в админку), если в нём не 0, то установить глобальную переменную GLOBAL_REBOOT значением взятым из файла. А остальные потоки периодически проверяют значение GLOBAL_REBOOT, и если[[GLOBAL_REBOOT]] == [[THREAD_INDEX]], то завершить поток.
И всё в том же духе, у меня всё управление скриптом завязано на первом потоке.