Javascript 我的计数器变量对并发任务安全吗?

Javascript 我的计数器变量对并发任务安全吗?,javascript,node.js,callback,Javascript,Node.js,Callback,柜台下线程安全吗?我认为,如果我在异步函数上使用sync函数,计数器就会正常工作。我说得对吗?我的解释是函数a()是同步函数。这意味着这个函数是原子的,这就是为什么只有一个进程在内部工作。这也意味着计数器可以安全增加 `var counter = 0; function a(){ counter++ } async function count(){ //IO code; a(); } count();

柜台下线程安全吗?我认为,如果我在异步函数上使用sync函数,计数器就会正常工作。我说得对吗?我的解释是函数a()是同步函数。这意味着这个函数是原子的,这就是为什么只有一个进程在内部工作。这也意味着计数器可以安全增加

    `var counter = 0;
     function a(){
     counter++
     }
     async function count(){
      //IO code;
      a();
     } 
     count();`

是的,代码是线程安全的。大多数值(SharedArrayBuffers除外)不能在线程之间共享,因此它们不能由两个不同的线程同时访问

正如您提到的“异步函数”:它们异步运行,即它们可能会在指定点停止(基本上是在您使用
等待
时),然后其他代码可能会运行,但所有其他代码都会运行到完成(因此,当您使用
等待
时,其他代码可能只在这两个点之间运行)

同一操作可能失败的示例:

  counter = counter + await Promise.resolve(1);

这可能会失败,因为
计数器
得到评估,然后承诺得到
等待
ed,同时其他代码可能会更改
计数器
,然后您分配回
计数器

如果我直接从异步函数到达计数器变量,计数器变量是否安全?