为什么这段代码会导致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;
}
谢谢。
最佳答案
JavaScript 和 Node 是单线程的。通过在另一个线程中运行该代码,您实际上是在尝试同时运行两个 JS 线程。
V8 允许你在线程上运行两个 JS 实例,但它们需要完全独立的 Isolate
实例。
通常在另一个线程中编写的 C++ 代码将只使用标准的 C++ 类和变量,然后使用 libuv's threading support通过uv_async_send
,然后主线程中的async handler将这些值转换为V8对象进行JS处理。
关于c++ - 另一个 pthread 中的 V8 代码导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21316914/