gpt4 book ai didi

javascript - 如果用户多次单击元素,如何避免竞争条件?

转载 作者:行者123 更新时间:2023-12-02 18:07:39 26 4
gpt4 key购买 nike

如果用户多次单击该元素,如何避免竞争条件?据我所知,Javascript 是一种单线程语言。会发生任何竞争条件吗?

如果是这样,我能想到的最好的办法就是在关键部分之前有一个标志。但从一般的并发知识来看,如果2个线程一起进入第3行,仍然可能会发生竞争条件。

var isInProgress = false;
$('#target').click(function () {
if (isInProgress) {
console.log('In progress, skipping.');
return;
}
isInProgress = true;

// Critical section start
...
// Critical section end
isInProgress = false;
});

最佳答案

竞争条件可能发生,主要是当程序员忘记 AJAX 等异步函数时。这种情况在 jQuery 用户中更容易发生,但即使是 Vanilla JS 编码员也容易受到这个问题的影响(但我完全不会。不可能。我永远不会犯这样的错误。不。-shifty eyes-)

话虽这么说,在这种情况下似乎不存在任何竞争条件的可能性。为了进行演示,请使用每个选项卡都有一个进程的浏览器(即不是 Firefox!),因为这会使它崩溃。

<button onClick="for(var i=0; i<1000000000; i++) alert('Clicked!');">Button</button>

由于单线程的原因,点击事件发生时浏览器不会响应。

现在关闭浏览器选项卡。你不庆幸自己没有使用 Firefox 吗? :p

关于javascript - 如果用户多次单击元素,如何避免竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19965526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com