6

使用 Google 的 v8 c++ 库,我想创建一个上下文,其中我定义了多个模板、变量和全局变量,并准备好供代码中的多个位置使用,这些位置可能在不同的线程上运行,每个线程都有自己的隔离,它们也应该在其中每个线程都有自己的本地上下文副本,因此对一个线程中全局变量的任何更改都不会影响其他线程。

每次我想要一个新的上下文时,我都可以通过显式设置所有模板、变量和全局变量来做到这一点,但我想知道是否有更有效的方法。假设我已经有一个代表主状态的全局 v8::Isolate 指针和 v8::Persistent。那么我需要做什么,如果我想在自己的线程中创建一个全新的隔离,并创建一个本质上是 master 克隆的新上下文?我知道我可以在对主服务器的访问周围包装一个互斥锁,以确保不同的线程在必要时不会同时访问它。我只是不知道如何有效地将在一个隔离区中生成的信息复制到另一个隔离区,而无需从头开始重新创建其全部内容。

4

1 回答 1

2

您不能在 Isolate 之间共享对象。从这里

Isolate 表示 V8 引擎的一个隔离实例。V8 隔离具有完全独立的状态。来自一个隔离区的对象不得用于其他隔离区。嵌入器可以创建多个隔离并在多个线程中并行使用它们。在任何给定时间,最多可以有一个线程进入一个隔离。必须使用 Locker/Unlocker API 进行同步。

于 2015-10-21T21:04:41.587 回答