gpt4 book ai didi

c++ - 如何在线程中使用 v8?

转载 作者:可可西里 更新时间:2023-11-01 18:39:14 25 4
gpt4 key购买 nike

我正在尝试在非主线程的线程中使用来自 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 的储物柜的示例。在此示例中,它用于多线程,但我相信该规则也适用于单线程。

Isolates 仅在您需要并行使用 v8 的多个实例时才需要。

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

关于c++ - 如何在线程中使用 v8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com