目前是 V8 线程安全的

is V8 thread-safe at the moment?

本文关键字:安全 线程 V8 目前      更新时间:2023-10-16

当我意识到我错过了一个重要的地方时,我终于选择了 v8 作为我的应用程序的脚本引擎:并发性。

由于几个关键因素,我决定使用 v8 而不是 lua,但显然我不能使用 v8 编写线程安全代码或多线程任务。

在官方文档中,我没有发现对 v8 并发功能的引用,它们描述了 GC,v8 是用 C++ 编写的,它支持很多平台等等,但没有关于在 wiki 和官方文档中线程化 v8 在C++应用程序中

问题:我应该如何看待 v8 ?我必须直接从C++将我的应用程序公开为一组单线程/线程安全函数?

V8 不是线程安全的,但这并不意味着你不能在线程环境中使用它。这样做的唯一规定是使用 V8 的 Locker 对象,只要您访问任何与 V8 相关的东西。

这样做非常简单,只需创建一个新的v8::Locker实例,然后当你完成在 V8 中执行的任何操作时,创建一个v8::Unlocker

根据我对 V8 文档的经验...它非常糟糕,似乎(无论如何在我的使用中)学习如何使用它的最好方法是反复试验。

编辑:这个答案比我更好地解释了V8的多线程使用: