一尘不染

锁在物体上?

node.js

我是Node.js的新手,我敢肯定对此有一个简单的答案,我只是找不到它:(

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

所以在C#中像这样

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

谢谢 :)


阅读 199

收藏
2020-07-07

共1个答案

一尘不染

如果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库。

2020-07-07