node.js - 锁定对象?

标签 node.js locking

我对 Node.js 很陌生,我确信有一个简单的答案,我只是找不到它:(

我正在使用文件系统来保存“包”(状态扩展名为“mypackage.idle”的文件夹)用户可以对它们执行操作,这会导致状态变为“qa”或“部署”等等......如果服务器正在接受大量请求并且多个请求进入同一个包,我将如何检查状态然后执行一个操作,这将改变状态,保证另一个请求之前没有改变它/ Action 发生期间?

所以在 c# 中是这样的

lock (someLock) { checkStatus(); performAction(); }

谢谢:)

最佳答案

如果 checkStatus() 和 performAction() 是一个接一个调用的同步函数,那么正如前面提到的其他人所说:它们的执行将不间断地运行直到完成。 但是,我怀疑实际上这两个函数都是异步的,组合它们的实际情况是这样的:

function checkStatus(callback){
  doSomeIOStuff(function(something){
    callback(something == ok);
  });
}

checkStatus(function(status){
  if(status == true){
    performAction();
  }
});

上面的代码受竞争条件的影响,因为当 doSomeIOStuff 正在执行而不是等待它时,可以提供新的请求。

您可能需要查看 https://www.npmjs.com/package/rwlock图书馆。

关于node.js - 锁定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145749/

相关文章:

node.js - 如何在 npm 脚本中使用大括号?

javascript - 字符串有隐藏字符,无法验证,

node.js - 如何覆盖依赖项的依赖项?

c# - 文件锁定 - 在锁定时读取然后写入

Java 锁和条件

Jenkins 可锁定资源 - 无需解锁即可锁定

javascript - 没有获得 Express 的智能感知

javascript - express.js 排除 html 文件的路径吗?

c# - c# 锁可以序列化对外部资源的访问吗?

coldfusion - CFLOCK 中的 CFRETURN 是否正确释放锁?