当我意识到我错过了一个重要的位置:并发时,我终于选择v8作为我的应用程序的脚本引擎.
由于几个关键因素,我决定使用v8而不是lua,但显然我不能用v8编写线程安全代码或多线程任务.
在官方文档中,我没有发现v8的并发功能,它们描述了GC,v8是用C++编写的,它支持很多平台,等等,但没有关于wiki和官方文档的线程用于在V ++应用程序中嵌入v8.
问题:我应该如何思考v8?我必须将我的应用程序作为一组单线程/线程安全函数直接从C++公开?
V8不是线程安全的,但这并不意味着您无法在线程环境中使用它.这样做的唯一规定是使用V8的Locker
对象,无论何时访问任何V8相关的东西.
这样做非常简单,只需创建一个新实例,v8::Locker
然后当您完成在V8中执行的任何操作时,创建一个实例v8::Unlocker
根据我对V8文档的体验......它显得很糟糕,而且似乎(在我使用中)学习如何使用它的最佳方法是试错.
编辑: 这里的答案解释了比我更多的多线程使用V8: