【发布时间】:2010-10-07 23:58:02
【问题描述】:
Javascript 中是否存在诸如原子测试和设置、信号量或锁定之类的东西?
我有 javascript 通过自定义协议调用异步后台进程(后台进程实际上在单独的进程中运行,与浏览器无关)。我相信我正在陷入竞争状态;后台进程在我的测试和我的设置之间返回,在 javascript 方面搞砸了。我需要一个测试和设置操作来使它成为一个真正的信号量。
这是尝试检测后台进程并将它们排队的 javascript 代码:
Call = function () {
var isRunning = true,
queue = [];
return {
// myPublicProperty: "something",
call: function (method) {
if (isRunning) {
console.log("Busy, pushing " + method);
queue.push(method);
} else {
isRunning = true;
objccall(method);
}
},
done: function() {
isRunning = false;
if (queue.length > 0) {
Call.call(queue.shift());
}
}
};
}();
Call是一个实现排队的单例;任何想要调用外部进程的人都会调用 Call.call("something") 。
有什么想法吗?
【问题讨论】:
-
您可能想要更详细地指定您的“流程”。这是服务器端的 JavaScript 吗?
-
Javascript 代码总是原子的,所以不需要锁定或任何东西。见Why don't we have a concurrency control tool in javascript?。
标签: javascript concurrency semaphore