【问题标题】:Is increment an atomic operation in JavaScript?递增是 JavaScript 中的原子操作吗?
【发布时间】:2017-08-24 06:26:07
【问题描述】:

递增是 JavaScript 中的原子操作吗?如果一个线程正在访问 ++i; 和另外一个同时开始访问,操作会不会有问题?

【问题讨论】:

标签: javascript multithreading thread-safety atomic


【解决方案1】:

Javascript 不支持多线程。它可能有网络工作者,但你的问题不适用于这种情况,因为工作者不共享变量。

【讨论】:

    【解决方案2】:

    Javascript 是单线程的,因此您需要担心解除锁或脏读问题。 Why doesn't JavaScript support multithreading?

    【讨论】:

    • 生成器函数呢?当然,您可以在生成器函数结束之前退出它!
    【解决方案3】:

    在 Javascript 中,函数总是运行到完成,这意味着如果一个函数正在运行,它将完全运行,只有在那之后另一个函数才会被调用,所以语句之间没有交错的机会(但在 java 的情况下它是不同的),如果您对异步执行感到困惑,而不是总是记住异步意味着以后不并行,那么,遇到您的问题,答案是,不,您不会遇到任何问题,这将是完全的原子操作。

    【讨论】:

    • 你有这个来源吗?
    【解决方案4】:

    是的,会有问题。即使Javascript是单线程的,i++也是(writer + modify + write) 3步操作,所以当任何人取i变量时,另一个人可以将修改后的i设置到变量区。为了解决这个问题,您可以使用原子变量代替常规变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 2016-11-05
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多