var i=0
async function a(){
i++
}
a();
以上代码可以安全运行吗?即使Javascript是单线程的,特别是在读+修改+写操作期间,另一个工作线程也可以在异步函数中操作相同的操作。
当调用async
函数时,它将同步运行,直到在函数内部发生await
。看到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
描述因此,如果i++
发生在函数中的任何await
语句之前,则可以依赖于其同步发生。
正如你的问题所承认的,Javascript是单线程的(除非你使用web worker,但这些是彼此隔离的)。
如果你想确保两个不同的异步方法在修改共享变量时不会相互交错,可以使用某种信号量。