6

Suppose I have the following piece of code

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;

}

Is it true that one cannot execute this code using multiple threads? It seems like HandleScope is not designed to be used in multithreaded applications. I can use the v8::Locker and v8::Unlocker methodes but that would always give me execution traces as this:

t1: a = 1
t1: b = 2

t2: a = 1
t2: b = 2

I hope someone can give me a hint on getting this code multithreaded so that a possible execution trace could like this:

t1: a = 1
t2: a = 1

t1: b = 2
t2: b = 2

2 Answers 2

2

According to v8 issue 510, a feature called "Isolates" was added to the trunk some months back. This should allow multiple (non-interacting) instances of v8 in a single process.

Sign up to request clarification or add additional context in comments.

Comments

1

Look at this post. The v8 engine has a Locker class, that lets you preempt your code. With this you can use multiple threads.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.