C++ 目前V8线程安全吗?

C++ 目前V8线程安全吗?,c++,multithreading,v8,C++,Multithreading,V8,我最终选择v8作为我的应用程序的脚本引擎,这时我意识到我错过了一个重要点:并发性 由于几个关键因素,我决定使用v8而不是lua,但显然我不能用v8编写线程安全代码或一般的多线程任务 在官方文档中,我没有提到V8的并发特征,它们描述了GC,V8是用C++编写的,它支持很多平台,等等,但是在wiki和官方文档上都没有关于在C++应用程序中嵌入V8的线程。 问题:我应该如何看待v8?我必须将我的应用程序暴露为一组单线程/线程安全函数,从C++ + v8不是线程安全的,但这并不意味着你不能在线程环境

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

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

在官方文档中,我没有提到V8的并发特征,它们描述了GC,V8是用C++编写的,它支持很多平台,等等,但是在wiki和官方文档上都没有关于在C++应用程序中嵌入V8的线程。


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

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

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

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


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

隔离
Locker
听起来像是C/C++中的互斥锁,但我不知道一件事,如何启动多线程?在链接的答案中有一个链接说v8一次只能在一个线程上运行,这对v8内部的任何场景都是真的吗?据我所知是的,v8一次只能在一个线程上运行。尽管要澄清您的评论的第一部分,隔离基本上是V8的干净实例。您可以创建一个新的
隔离
,以分离不同网络脚本的执行。如果任何东西
Locker
隔离更类似于互斥锁。