如何在线程中使用v8
How do I use v8 in a thread?
我正试图在一个不是主线程的线程中使用来自c++的v8。就v8而言,没有多线程,所有v8对象都是在该线程中创建和销毁的。没有并行运行,也没有共享。当我从主线程运行程序时,一切都很好。当我在另一个线程中有v8的东西时,当我创建v8::HandleScope时,会出现分段错误。
我找不到任何关于v8如何实际解决线程问题的有用文档。搜索时经常弹出"使用隔离物和储物柜"的说明,但我找不到任何关于如何做到这一点的例子。v8::Isolate上有一个API文档,但该页面上没有任何内容告诉我在特定情况下是否需要它们(我不共享内存或并行执行)。v8::Locker()上的文档甚至没有关于类的用途的信息。项目中包含的样本也不处理任何这些问题。
所以我的问题是。。。
- 我需要在这里使用隔离物和/或储物柜吗
- 我能举一个如何使用它们的简单例子吗?即使是伪代码或其他东西也会非常有用
在调用HandleScope时,将使用上下文的方法中确实需要V8::Locker。https://github.com/jasondelponte/go-v8/blob/master/src/v8context.cc#L41是我如何在v8中使用储物柜的一个例子。在本例中,它用于多个线程,但我相信该规则也适用于单线程。
只有当您希望v8的多个实例并行时,才需要Isolates。
https://groups.google.com/forum/?fromgroups=#!topic/v8 users/FXpeTYuAqKI是我不久前发现的一个旧线程,它帮助我解决了HandleScope本地变量一创建库就崩溃的问题。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- 存储/传递 v8 承诺解析器供以后使用的最佳实践?(结合C++线程)
- v8 多线程储物柜
- 目前是 V8 线程安全的
- 如何从不同的线程调用主v8循环中的函数
- 从 Web 工作线程调用C++ v8 函数
- 实例化变量的 V8 顺序(多线程)
- 作用域和线程局部变量如何在 (V8) C++中工作?
- Google V8引擎可以在不同的上下文、不同的线程中同时运行不同的javascript吗?
- 我如何在v8中创建另一个线程