我需要从多个回调(事件处理程序)中增加全局变量,这些回调可能会同时触发。我需要担心同时访问该变量吗?有没有像 C# 中的 Interlocked.Increment 类似的东西?
JavaScript 中有 Interlocked.Increment 的类似物吗?
是的,但您的场景不需要它。
我的意思是我需要从几个不同的回调(事件处理程序)中增加全局值,这些回调可能同时触发。
它们永远不会同时开火。浏览器上的 JavaScript 在每个全局环境中仅运行一个线程(规范将其称为realm),有时在多个全局环境中共享同一个线程。即使处理程序的事件同时触发或者所有处理程序响应同一事件,对它们的调用也会在任务队列中排队(JS 规范将其称为作业队列,HTML 规范将其称为任务队列),并且队列一次处理一个任务/作业。
我需要担心同时访问该变量吗?
不在你的场景中,不。
1 仅提供详细信息:您仅在共享时需要它SharedArrayBuffer具有多个线程的实例(在浏览器上,这将通过网络工作者)。它是Atomics.add并对类型化数组进行操作,该数组可能由SharedArrayBuffer
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)