首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpiderMonkey是线程安全是什么意思?

SpiderMonkey是线程安全是什么意思?
EN

Stack Overflow用户
提问于 2014-11-15 02:41:55
回答 2查看 902关注 0票数 1

我可以将SpiderMonkey构建为一个库,并在我的C++应用程序中使用它作为Javascript引擎。

在文档中指定SpiderMonkey是线程安全,但这意味着什么,因为Javascript/Ecmascript目前甚至没有线程模型。关于SpiderMonkey这个短语,什么样的调用或表达式被限定为“安全”?它只是一段C++代码,调用从任何C++线程到Javascript虚拟机的任何JS功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 07:31:13

库的线程安全意味着库可以在多线程环境中使用。SpiderMonkey库可以集成到多线程C++应用程序中。与JavaScript语言模型无关。

,但是某些规则和限制适用于。这些规则令人困惑,因为它们一直在从库的一个版本更改到另一个版本,而文档过去和现在仍然不太清楚它们。文档页经常显示这样的注释:“自.”或“草案正在进行中.”或“未找到404”。

从壁虎12.0或SpiderMonkey 24开始,规则如下:

  • JSRuntime是单线程的.您必须只从一个线程使用它。
  • 若要同时从多个线程调用库API,请使用多个JSRuntimes
  • 在JS_THREADSAFE构建中,许多JSAPI函数只能从请求中调用(JS_THREADSAFE现在永久打开)
  • 带JS_BeginRequest、JS_EndRequest函数或使用JSAutoRequest类的括号API调用
  • 垃圾收集器挂起调用SpiderMonkey的所有其他线程。若要将等待时间保持在最低限度,请避免长期运行的请求。不要在JS_BeginRequest、JS_EndRequest块中包括阻塞I/O或耗时的计算。

您可以考虑构建调试版本的SpiderMonkey来测试集成。尝试使用标志:

代码语言:javascript
复制
--enable-root-analysis --enable-debug --disable-optimize

它们在库代码中添加断言,以帮助捕获线程(垃圾收集器和内存)相关的问题。

票数 1
EN

Stack Overflow用户

发布于 2014-11-15 02:53:31

对于您的C++应用程序,这是线程安全。您可以从C++代码中的多个线程使用库,而无需考虑锁定数据结构等。

在这种情况下,库所做的与此无关(在您的示例中,执行JS代码)。重要的是库本身可以在多线程环境中使用。

维基百科:

当多个线程同时访问时,保证实现不受竞争条件的影响。

在维基百科中阅读更多关于线程安全的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26941923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档