我是Node.js的新手,我敢肯定对此有一个简单的答案,我只是找不到它:(
我正在使用文件系统来保存“程序包”(状态扩展名为“mypackage.idle”的文件夹),用户可以对这些程序执行操作,这会使状态变为“qa”或“部署”等。如果服务器正在接受大量请求,并且同一个程序包中有多个请求,我将如何检查状态,然后执行一个操作,这将更改状态,从而确保另一个请求在操作之前/执行过程中没有更改发生?
所以在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库。