Предположим, что у меня есть следующая часть кода
bool run (void)
{
HandleScope hande_scope;
Handle<String> source;
Local<Script> script;
Persistent<Context> context;
context = Context::New();
Context::Scope context_scope(context);
script = Script::Compile("var a = 1; var b = 2;");
Local<Value> result = script->Run();
if (result.IsEmpty())
return false;
else
return true;
}
Действительно ли это верно, что нельзя выполнить этот код с помощью нескольких потоков? Это походит HandleScope
не разработан, чтобы использоваться в многопоточных приложениях. Я могу использовать v8::Locker
и v8::Unlocker
методы, но это всегда давало бы мне трассировки выполнения как это:
t1: a = 1
t1: b = 2
t2: a = 1
t2: b = 2
Я надеюсь, что кто-то может дать мне подсказку при получении этого кода, многопоточного так, чтобы возможной трассировке выполнения могло понравиться это:
t1: a = 1
t2: a = 1
t1: b = 2
t2: b = 2
Посмотрите этот пост . У движка v8 есть класс Locker, который позволяет вам вытеснять ваш код. При этом вы можете использовать несколько потоков.