Мультипоточность
AngelScript поддерживает многопоточность, хотя еще и не на всех платформах.
Определить поддержку для вашей платформы можно вызвав функцию asGetLibraryOptions. Если возвращаемое значение содержит AS_NO_THREADS то многопоточность не поддерживается.
Если вы не хотите или не можете использовать многопоточность, вы все равно можете писать приложения, которые выполняют несколько скриптов одновременно.
Замечания
- Всегда называйте asThreadCleanup до прекращения потока, который обращается к движку. Если этого не сделать, память, выделенная специально для этого потока, будет потеряна.
- Разные потоки могут выполнять скрипты в отдельных контекстах. Контексты могут запускать скрипты из одного и того же модуля,
но если модуль имеет глобальные переменные, то вы должны убедиться в том, что скипты осуществляют корректный доступ к ним.
- Движок позволяет выполнять только один поток для скриптов в одно и тоже время, поэтому изменение внутреннего состояния движка не может быть безопасно произведено из нескольких потоков.
- Не запускайте сборщик мусора пока выполняются другие скриптовые потоки.
- Ресурсы, разделенные скриптовыми модулями (как зарегистрированные свойства и объекты) должны быть защищены от одновременного доступа, а скриптовый движок не делает это автоматически.
Нити
AngelScript также умеет работать с нитями. Однако, вы должны быть осторожны при запуске нескольких нитей, если не обращать внимание на точки входа и выхода можно легко повередить стек.
Приостанавливайте выполнение текущей нити и только потом переключайтесь на другую.