首页 > 解决方案 > 文件中的同时递增计数器

问题描述

我有一个整数文件,比如 10。

每个 http 请求我的 nodejs 应用程序从文件中读取整数,加 1 并写回结果:

fs.readFile(..., result => ...fs.writeFile(..., result + 1) );

如果两个 http 请求几乎同时到达,是否有可能同时读取10和写入11,或者文件最终总是包含12

如果不是后者,这应该如何解决,使其始终如此?

标签: javascriptnode.jsfilehttpconcurrency

解决方案


我认为它应该对你有所帮助。我们只是检查我们的变量'proceeding',如果任务已经运行,我们等待它完成

const incrementor = {
  proceeding : false,
  result : 0,
  doWork: async function(){
      //waiting
      while(proceeding){
      //dont know should i use it in backend
        await new Promise(resolve=>{
          setTimeout(()=>{
            resolve();
          },5)
        })
      }
      proceeding = true;
      result = await fs.readFile('dwadwad.dwad');  
      result++;
      fs.writeFileSync(..., result);
      proceeding = false;
  }
}


推荐阅读