javascript - 同时访问变量

标签 javascript multithreading

我需要从多个回调(事件处理程序)中增加全局变量,这些回调可能同时触发。我是否需要担心同时访问该变量?是否有类似 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/

相关文章:

javascript - javascript中的文件下载进度

javascript - 从书签运行时,Bookmarklet 不起作用,但从控制台运行时可以

javascript - 将每列中的重复值替换为 null

javascript - 构建用于交互式讲故事的滚动条的最简约方法?

java - SwingWorker 在(不成功的)JLabel 图标更新时锁定 GUI

c - 第二个线程没有打印 - 带有互斥锁的 pthreads

javascript - 如何覆盖 jQuery ui 可排序的拖动事件?

multithreading - Storm Spouts 是否应该仅使用调用 Spout.nextTuple 的线程发出输出?

java - 在 Java 中使用轮询不好吗?

php - PHP,线程和 curl