javascript - 如何在 JavaScript 中实现锁

标签 javascript events locking dom-events deadlock

如何在 JavaScript 中实现与 C# 中的 lock 等价的东西?

所以,为了解释我的想法,一个简单的用例是:

用户点击按钮 BB 引发 onclick 事件。如果 B 处于 event-state,则事件在传播之前等待 B 处于 ready-state。如果B处于ready-stateB被锁定并设置为event-state,则事件传播。当事件传播完成时,B 设置为 ready-state

我可以看到如何完成类似的事情,只需在按钮中添加和删除类 ready-state 即可。然而,问题在于用户可以连续两次单击按钮的速度比设置变量的速度快,因此这种锁定尝试在某些情况下会失败。

有谁知道如何在 JavaScript 中实现不会失败的锁?

最佳答案

Lock 是 JS 中一个有问题的想法,它旨在实现无线程且不需要并发保护。您希望结合延迟执行的调用。我为此遵循的模式是使用回调。像这样:

var functionLock = false;
var functionCallbacks = [];
var lockingFunction = function (callback) {
    if (functionLock) {
        functionCallbacks.push(callback);
    } else {
        $.longRunning(function(response) {
             while(functionCallbacks.length){
                 var thisCallback = functionCallbacks.pop();
                 thisCallback(response);
             }
        });
    }
}

您还可以使用 DOM 事件监听器或发布订阅解决方案来实现这一点。

关于javascript - 如何在 JavaScript 中实现锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346694/

相关文章:

javascript - 锁只能用于多线程编程吗?

java - 使用JButton JAVA向ArrayList写入数据

sql - T-SQL 事务和表锁定

javascript - 获取 jQuery UI 日期选择器中选定月份的天数

javascript - Python 到 Javascript - Numpy 问题

C# - 将事件作为参数传递给子类时发生内存泄漏

javascript - 如何使用 jQuery 事件监听器获取目标元素?

mysql - InnoDb 比 MyISAM 更适合频繁的并发更新和插入,我这样说对吗?

javascript - 获取所有重叠特征的工具提示 D3

javascript - 使用 jquery 获取以厘米为单位的 div 高度?