2014-01-23 32 views
2

为什么这个代码带给段错误?:V8代码带来的段错误

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

jack_process在另一并行线程运行。我该如何做到这一点?我如何在另一个pthread中运行V8代码?

请注意,这段代码没有任何segfaults。

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

谢谢。

+0

您使用的是哪个版本的v8?在最新版本中没有新的方法,只需要处理,你应该通过一个指针来隔离:这是一个定义:'本地本地 ::新(隔离*隔离,处理那个);' –

+0

'$ node --version' 'v0.10.24' – Applejohn

+0

反正在主线程中工作正常。 – Applejohn

回答

1

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

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

一般C++写在另一个线程代码,只需要使用标准的C++类和变量,然后通过uv_async_send使用libuv's threading support,然后在主线程异步处理器将这些值转换成JS处理V8对象。