另一个pthread中的V8代码带来了段错误

时间:2014-01-23 18:52:13

标签: c++ node.js v8

为什么这段代码会带给SEGFAULT?:

int jack_process(jack_nframes_t nframes, void *arg)
{
    Local<Value> test = Local<Value>::New( Number::New(2) );
    return 0;
}

jack_process正在另一个pthread中运行。我怎么能正确地做到这一点?我如何在另一个pthread中运行V8代码?

请注意,此代码没有任何段错误。

int jack_process(jack_nframes_t nframes, void *arg)
{
    Local<Value> test;
    return 0;
}

感谢。

1 个答案:

答案 0 :(得分:1)

JavaScript和Node是单线程的。通过在另一个线程中运行该代码,您实际上是在尝试同时运行两个JS线程。

V8允许您在线程上运行两个JS实例,但它们必须是完全独立的Isolate个实例。

通常用另一个线程编写的C ++代码只使用标准C ++类和变量,然后通过uv_async_send使用libuv's threading support,然后主线程中的异步处理程序将值转换为V8对象用于JS处理。