【问题标题】:To lock or not to lock锁还是不锁
【发布时间】:2013-06-14 22:16:00
【问题描述】:

我有一个 JavaScript/jQuery Web 应用程序,其中包含一个对象,用户可以通过 DOM 事件以及服务器通过 Web 套接字或 xhr 进行读/写访问。

我知道 JavaScript 是单线程的。尽管如此,我怀疑在这种设置中,有问题的对象可能会受到竞争条件的影响,我想知道在 JavaScript 中没有锁的情况下如何处理这个问题。

【问题讨论】:

  • 如果您正在通过 websocket 异步处理对象副本的更新,那么您必须 (a) 确保每次更新都已完成并将对象置于正确的状态(即原子的),或者(b)实现事务(呃,有一个库吗?),或者(c)接受本地对象不时处于不正确的状态。
  • 我认为我从未见过真正的竞争条件出现在实际的 javascript 代码中,尽管一切都是第一次......

标签: javascript jquery mutex semaphore race-condition


【解决方案1】:

JavaScript 中有一种锁定:当您向您发送 AJAX 请求(本机 XMLHttpRequest)时,您可以将异步属性设置为 false,这样浏览器窗口将在收到用户的任何交互之前被“锁定”服务器对正在发送的 ajax 请求的答复。

关注mozilla dev docs了解更多详情

【讨论】:

    【解决方案2】:

    嗯...我想你可以写一个“锁”,如果你说的是多个事物每个都需要独占使用对象,而这些使用跨越多个事件。

    这是一个概念证明:https://github.com/chris-martin/lock.js

    【讨论】:

      【解决方案3】:

      套接字将像用户一样通过事件写入。无论源是什么,事件都会排队。无需担心并发问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多