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