gpt4 book ai didi

javascript - 如何在 node.js 中编写线程安全的代码

转载 作者:搜寻专家 更新时间:2023-11-01 00:24:51 30 4
gpt4 key购买 nike

这是我的 app.js 的一部分:

var connections = [];

function removeConnection(res) {
var i = connections.indexOf(res);
if (i !== -1) {
connections.splice(i, 1);
}
}

我在请求关闭时调用 removeConnection:

req.on('close', function () {
console.log("connection closed");
removeConnection(res);
});

请问上面的代码是线程安全的吗?我的意思是,由于 Node.js 是事件驱动的,是否可能出现以下情况?

  1. 连接是[a,b,c]
  2. threadB 调用 removeConnection
  3. 在 threadB.removeConnection 中:i = 1
  4. threadA 调用 removeConnection
  5. 在 threadA.removeConnection 中:i = 0
  6. 在 threadA.removeConnection 中:connections.splice(0, 1); => 连接是 [b,c]
  7. 在 threadA.removeConnection 中:connections.splice(1, 1); => 连接是 [b]

正如您在这种情况下看到的,threadC 的连接将被删除,而不是 threadB 的。

这会发生吗?如果是,那么我应该如何修复代码?

最佳答案

Node.js 的关键原则之一是所有用户代码都在单个线程中运行,这消除了开发人员处理编写线程安全代码的复杂性的需要。

因此您的代码(以及所有 Node.js 代码)根据定义是线程安全的。

关于javascript - 如何在 node.js 中编写线程安全的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783882/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com