@hvrsh said in Ошибка при работе в многопотоке:
@sergerdn посмотрел бы с удовольствием на реализацию
Еле нашел релеватную инфу блокировкам - http://community.bablosoft.com/post/159366.
Вкратце, то в BAS код может быть не асинхронным. А вызывая синхронный код в одном из потоков, все остальные потоки ждут и ничего не делают.
И получаем глобальную блокировку всех потоков выполнения как некий побочный эффект.
В NodeJS можно использовать https://www.npmjs.com/package/async-lock.
@hvrsh said in Ошибка при работе в многопотоке:
и чем это вариант объективно лучше глоб переменной.
Я исхожу из того, что глобальные переменные это плохо, так как захламлять пространство имен не может быть хорошим стилем программирования. Для меня это аксиома.
И как будут вести себя модули, если внутри модуль будет работать с глобальными переменными, это я не знаю. А если не знаю, то и не использую.
Вероятно, есть варианты, когда не остается никаких путей, кроме глобальных переменных, например:
- нужно провести инициализацию модуля, чтобы не вызывать одни и те же действия каждый раз при вызове функции из модуля
- хочется иметь глобальный объект с настройками скрипта, чтобы его не таскать по всем потокам, для передачи как параметр в функции
- может быть иметь глобальный явный mutex, как я выше дал ссылку - http://community.bablosoft.com/post/159366