node.js - 在 Node.js 中使用 i++ 时的全局变量安全

标签 node.js counter atomic event-loop

var i = 1;

function er() {
   i++;
}

据我所知,i++操作包括三个步骤。 Read-modify-write,当任何事件读取时(第一步),任何其他事件是否可以修改相同的i值?读取后,在修改过程中,任何其他事件是否可以通过上下文切换获得修改权限?上下文切换如何工作?

最佳答案

Javascript (nodejs) 本质上是单线程的。一切都发生在回调、 promise 解决或定时器/间隔处理程序中,或在主程序中。这些东西不像在多线程环境中那样是可抢占的。

在 Javascript 中,上下文切换或线程切换无法生成潜在的竞争条件,从而破坏 i++ 或任何其他读取-修改-写入操作的完整性。

该语言不需要由例如 C#'s Interlocked.Increment() method 公开的互锁增量硬件操作.

关于node.js - 在 Node.js 中使用 i++ 时的全局变量安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62901295/

相关文章:

node.js - PM2 不形成簇

Python - 格式化most_common的输出

c - Linux Kernel中读写原子操作的实现

node.js - 我们可以在不完全上传的情况下限制上传文件大小吗?

javascript - 管理事件监听器内部的逻辑; (我应该如何添加监听器?或者我应该使用条件 "gatekeeper"代替?)

css - 如何从 Sass mixin 输出 CSS 计数器

python - 在 Python tkinter 中使用按钮计数器

多个资源的 RESTful 原子更新?

c++ - 操作可以重新排序到memory_order_release之前吗?

javascript - Node 错误 - 在 MakeCallback 中使用域属性已被弃用