首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JavaScript中实现锁

如何在JavaScript中实现锁
EN

Stack Overflow用户
提问于 2011-03-18 07:57:21
回答 7查看 115K关注 0票数 96

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

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

用户单击按钮BB会引发一个onclick事件。如果Bevent-state中,则事件在传播之前等待Bready-state中。如果Bready-state中,则B被锁定并设置为event-state,则事件将传播。当事件的传播完成时,B被设置为ready-state

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

有人知道如何在JavaScript中实现一个不会失败的锁吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-18 09:17:58

在JS中,锁是一个值得怀疑的想法,它旨在成为无线程的,并且不需要并发保护。您希望组合延迟执行上的调用。我遵循的模式是使用回调。如下所示:

代码语言:javascript
复制
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事件侦听器或pubsub解决方案来实现这一点。

票数 89
EN

Stack Overflow用户

发布于 2016-12-25 00:31:55

我已经成功了,mutex-promise

我同意其他答案,即在您的案例中可能不需要锁定。但这并不是说在Javascript中永远不需要锁定。在访问不处理并发的外部资源时,您需要互斥。

票数 15
EN

Stack Overflow用户

发布于 2011-06-08 22:54:44

锁是多线程系统中需要的一个概念。即使使用工作线程,消息也是按值在工作线程之间发送的,因此不需要锁定。

我怀疑你只需要在你的按钮之间设置一个信号量(标志系统)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5346694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档