JavaScript中是否有锁的概念?
发布于 10 年前 作者 kingapple 11785 次浏览 最后一次编辑是 8 年前

某个全局变量,被两个函数操作,1个函数操作需要较长的实际,第二个函数要操作这个变量的时候,第一个函数还没操作完,这就互相两个函数共同操作一个全局变量的问题,这个时候没有说,程序运行会出错滴:( JS是否有锁来解决这种问题捏:)

8 回复

没有锁,async可以试试看

换神马方式,亲)

callback的方式

贴代码解释下吧。 可以看看 async库

锁是多线程的东西,单线程的js只有event loop。你这两个异步函数可以通过设置一个状态标志来解决。

假如你需要func1操作完了,func2才能操作的话,可以增加一个 var mutex=1 的全局变量。

  • func1初始操作时设置为 mutex=0 ,操作完了再设回来 mutex=1
  • func2操作前检查 if(mutex) ,为true则操作,否则 nextTick

JavaScript没有多线程的概念,所以也不需要锁,你说的两个函数同时运行的这种情况在JavaScript中不会出现

没赋值或没定义的变量,该怎么报错就怎么报错呗,node是单进程的,不需要锁,也没有锁。这种问题主要用流程控制来解决,否则就会变成回调嵌套回调,推荐使用async

这是一个专门的库?不是JS标准API?

回到顶部