@senerg said in Изменить глобальный массив:
[[VAL]] = JSON.parse(P("basglobal", "FIN_LIST")); // Читаешь глобальную в локальную
// Делаешь с локальной переменной что угодно, НО БЕЗ АСИНХРОННЫХ ДЕЙСТВИЙ!
PSet("basglobal", "FIN_LIST", JSON.stringify([[VAL]])); // Записываешь обратно в глобальную.
Чем вам асинхронные действия то так не угодили? Я уже много раз вам говорил, что нет разницы какие действия применять, всё зависит от задачи.
@pragmatik said in Изменить глобальный массив:
Я бы сказал, что мне вот это больше подходит: https://community.bablosoft.com/topic/5724/lock-в-многопотоке/7
Если в одном потоке происходит запись в глобальный массив, то в глобальную переменную типа GLOBAL:LOCK происходит запись true (залочено), после записи - false (разлочено). Следующие потоки ждут разлочки - false, и только после неё записывают. Причём ждут с рандомным интервалом миллисекунд, чтобы если несколько потоков встали одновременно, какой-то из них был первым, какой-то вторым и т.д.
Обратите внимание на вот это моё сообщение в той теме:
@fox said in LOCK в многопотоке:
@senerg Где то у меня был тестовый скрипт, где я проверял на возможные ошибки одновременную запись. Я в 100 потоков с рандомными задержками записывал случайную строку в глобальную переменную и следом сразу проверял, что если в глобальной переменной другая строка, то прекратить скрипт. В итоге скрипт отработал 10 минут без каких либо ошибок. Думаю в рабочем скрипте более жёстких условий одновременной записи в глобальную переменную не будет.
Я одновременно записывал данные в глобальную переменную в 100 потоков! И за 10 минут работы это не привело к ошибке. lock в глобальной переменной уже реализован.