【问题标题】:Concurrently incrementing counter in file文件中的同时递增计数器
【发布时间】:2019-09-29 10:04:28
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 一种可能的解决方案是 readFileSync/writeFileSync ... 或者您自己设计的一些锁定机制
  • 您能否将整数存储在缓存中,该缓存在每次请求时递增,并定期写入文件?
  • @JaromandaX 没有以“rw”模式打开文件已经序列化访问它了吗?

标签: javascript node.js file http concurrency


【解决方案1】:

我认为它应该对你有所帮助。 我们只是检查我们的变量'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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多