如何在线程中使用v8?

时间:2012-08-28 06:41:23

标签: c++ multithreading v8

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

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

所以我的问题是......

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

1 个答案:

答案 0 :(得分: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局部变量,库就会崩溃。