【发布时间】:2013-05-09 08:53:14
【问题描述】:
我有一个思想实验。在我的代码中,我有一个全局变量 var changeMe;,我只进行了几次 Ajax 调用。
//call One -- third param is the callback function
ajaxFunction(url1, params,function(data){
changeMe = data;
});
//call Two
ajaxFunction(url2, params,function(data){
changeMe = data;
});
所以changeMe 的值将取决于哪个 Ajax 调用最后完成,这意味着最后完成的调用将覆盖该值。
如果两个调用恰好在同一时间、同一时间戳完成会怎样?
由于 Javascript 是单线程的,我们通常不会遇到这个问题,但在 setTimeout 和 Ajax 调用的情况下可能会出现这种情况。我不知道如何准确地复制这个问题,所以它仍然是一个思想实验。
那么在多线程情况下如何处理死锁?
我更喜欢changeMe 之类的答案将是 url1 或 url2 ,以及清晰的情况说明..
提前致谢
【问题讨论】:
-
在 JavaScript 中,你只有一个线程,所以不会有问题。
-
@Ishank ...谢谢你的朋友......但我没有得到一个简单的答案......
-
在 javscript 中维护了一个事件队列,下一个 ajax 将在上一个完成时启动..
-
他们不会。即使两者(以某种方式)在同一时刻完成交付,它们也会被依次处理。 Javascript从不是多线程的(好吧,除了最近引入的显式线程,但那些不能做网络任务)。
标签: javascript ajax multithreading deadlock