我需要从多个回调(事件处理程序)中增加全局变量,这些回调可能同时触发。我是否需要担心同时访问该变量?是否有类似 C# 中的 Interlocked.Increment 的模拟?
最佳答案
Is there any analog of Interlocked.Increment in JavaScript?
是的,但您的场景不需要它。¹
I mean I need to increment global value from several different callbacks (event handlers), which may fire simultaneously.
它们永远不会同时开火。浏览器上的 JavaScript 在每个全局环境中只运行一个线程(规范称之为 realm ),有时在多个全局环境中共享同一个线程。即使处理程序的事件同时触发或所有处理程序都响应同一事件,对它们的调用也会在任务队列中排队(JS 规范称其为作业队列,HTML 规范称其为任务队列),并且队列一次处理一个任务/作业。
Do I need to worry about simultaneous access to that variable?
不在你的场景中,不。
¹ 仅供引用:您仅在分享时需要它 SharedArrayBuffer
具有多个线程的实例(在浏览器上,将通过网络 worker )。这是Atomics.add
并对类型化数组进行操作,该数组可能由 SharedArrayBuffer
支持。
关于javascript - 同时访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52411476/