c++ - 另一个 pthread 中的 V8 代码导致段错误

标签 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;
}

谢谢。

最佳答案

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/

相关文章:

c++ - 为具有一些指针和许多数据成员的类设计复制构造函数的任何好的技术

c++ - 命名空间、类和编译器顺序

c++ - 为什么我会收到 no match for operator= in 'a = x' 错误?

javascript - 为什么 node.js 运行时比 Google chrome 控制台慢

Javascript:如何查看 toString 等 native 函数的源代码实现

c++ - 编译器无法解析函数调用

node.js - MongoDB 更新到 3.0 后 Heroku 应用程序崩溃

node.js - 如何使用nodejs读取docx文件?

node.js - 使用请求包在nodejs中抓取和解析html的最佳方法

c++ - 在 C++ 中使用数组调用具有可变数量参数的函数(如 python 的 * 运算符)