我对 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/