Создание различных контекстов v8, которые являются клонами другого

Используя библиотеку Google v8 c ++, я хочу создать контекст, в котором у меня есть несколько шаблонов, переменных и глобальных переменных, определенных и готовых к использованию несколькими местами в коде, которые могут работать в разных потоках, каждый со своим собственным изолятом, где они должны также у каждого есть своя локальная копия контекста, поэтому любые изменения глобальных переменных в одном потоке не влияют на другие.

Я могу сделать это, явно настроив все мои шаблоны, переменные и глобальные переменные каждый раз, когда мне нужен новый контекст, но мне интересно, есть ли более эффективный способ. Предположим, что у меня уже есть глобальный указатель v8 :: Isolate и v8 :: Persistent, которые представляют главное состояние. Что мне тогда нужно делать, если я хочу создать новый изолят в своем собственном потоке и создать новый контекст, который по сути является клоном мастера? Я знаю, что могу обернуть мьютекс вокруг доступа к мастеру, чтобы гарантировать, что разные потоки не обращаются к нему одновременно, если это необходимо. Я просто не знаю, как эффективно копировать информацию, которая была сделана в одном изоляте, в другой, не воссоздавая все его содержимое с нуля.

3

Решение

Вы не можете делиться объектами между изолятами. От Вот

Изолят представляет собой единичный экземпляр двигателя V8. Изоляты V8 имеют совершенно разные состояния. Объекты из одного изолята не должны использоваться в других изолятах. Устройство для внедрения может создавать несколько изолятов и использовать их параллельно в нескольких потоках. Изолят может быть введен не более чем одним потоком в любой момент времени. Для синхронизации необходимо использовать API Locker / Unlocker.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector