7

我正在尝试在不是主线程的线程中使用 c++ 中的 v8。就 v8 而言,没有多线程,所有 v8 对象都在该线程中创建和销毁。没有什么是并行运行的,没有什么是共享的。当我从主线程运行我的程序时,一切正常。当我在另一个线程中有 v8 的东西时,我在创建 v8::HandleScope 时出现分段错误。

我找不到任何关于如何使用 v8 实际处理线程的有用文档。搜索时经常弹出“使用隔离物和储物柜”的指令,但我找不到任何关于如何做到这一点的示例。v8::Isolate 上有这个 API 文档,但该页面上没有任何内容告诉我在特定情况下是否需要它们(我不共享内存或并行执行)。v8::Locker() 上的文档甚至没有关于该类的用途的信息。项目中包含的示例也不处理任何这些。

所以我的问题是...

  • 我需要在这里使用隔离物和/或储物柜吗?
  • 我能得到一个如何使用它们的最小例子吗?即使是伪代码或其他东西也会非常有用
4

1 回答 1

2

在调用 HandleScope 时,在将使用上下文的方法中确实需要 V8::Locker。https://github.com/jasondelponte/go-v8/blob/master/src/v8context.cc#L41是我如何将储物柜与 v8 一起使用的示例。在此示例中,它与多个线程一起使用,但我相信该规则也适用于单线程。

仅当您需要多个 v8 实例并行时才需要隔离。

https://groups.google.com/forum/?fromgroups=#!topic/v8-users/FXpeTYuAqKI是我不久前发现的一个旧线程,它帮助我解决了库在 HandleScope 局部变量出现后立即崩溃的问题创建的。

于 2013-01-21T07:57:54.617 回答