锁定一个物体?

Jus*_*tin 14 locking node.js

我是Node.js的新手,我确信有一个简单的答案,我找不到它:(

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

所以在c#这样的事情

lock (someLock) { checkStatus(); performAction(); }
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

qbo*_*lec 7

如果checkStatus()和performAction()是一个接一个地调用的同步函数,那么正如前面提到的那些:它们的exectution将不间断地运行直到完成.但是,我怀疑实际上这两个函数都是异步的,组成它们的现实情况如下:

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

checkStatus(function(status){
  if(status == true){
    performAction();
  }
});
Run Code Online (Sandbox Code Playgroud)

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

您可以查看https://www.npmjs.com/package/rwlock库.