Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同时访问变量_Javascript_Multithreading - Fatal编程技术网

Javascript 同时访问变量

Javascript 同时访问变量,javascript,multithreading,Javascript,Multithreading,我需要从几个回调(事件处理程序)中增加全局变量,这些回调可能同时触发。我需要担心同时访问该变量吗?是否有类似于C#中的联锁增量?默认情况下,任何客户端JavaScript代码都是同步的。事件被推送到事件队列中,并在单线程事件循环中处理。因此,你不需要关心比赛条件。参考例如 唯一的例外是当您开始使用web workers时。例如,在本例中,您可以看看Atomics() JavaScript中是否有任何类似的Interlocked.Increment 是的,但在您的场景中不需要它。ª 我的意思是,我

我需要从几个回调(事件处理程序)中增加全局变量,这些回调可能同时触发。我需要担心同时访问该变量吗?是否有类似于C#中的联锁增量?

默认情况下,任何客户端JavaScript代码都是同步的。事件被推送到事件队列中,并在单线程事件循环中处理。因此,你不需要关心比赛条件。参考例如

唯一的例外是当您开始使用web workers时。例如,在本例中,您可以看看Atomics()

JavaScript中是否有任何类似的Interlocked.Increment

是的,但在您的场景中不需要它。ª

我的意思是,我需要从几个不同的回调(事件处理程序)中增加全局值,这些回调可能同时启动

他们永远不会同时开火。浏览器上的JavaScript在每个全局环境中只运行一个线程(规范称之为a),有时在多个全局环境中共享同一个线程。即使处理程序的事件同时触发或所有处理程序响应同一事件,对它们的调用也会在任务队列中排队(JS规范称之为作业队列,HTML规范称之为任务队列),并且该队列一次处理一个任务/作业

我需要担心同时访问该变量吗

不是在你的场景中,不是


⑨仅供详细说明:您仅在与多个线程共享实例时需要它(在浏览器上,这将通过web workers实现)。它在一个类型化数组上运行,该数组可能由一个
SharedArrayBuffer

“它可能同时启动”支持。这在单线程的JavaScript中是不可能的。