6

假设我有以下代码

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::Lockerandv8::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
4

2 回答 2

2

根据v8 问题 510,几个月前在主干中添加了一个名为“隔离”的功能。这应该允许在单个进程中使用多个(非交互)v8 实例。

于 2012-02-04T04:18:03.967 回答
1

看看这个帖子。v8 引擎有一个 Locker 类,可以让您抢占您的代码。有了这个,您可以使用多个线程。

于 2010-05-18T12:26:03.133 回答