在Javascript中是否存在原子測試和設置,信號量或鎖定這樣的事情?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(「something」)。
任何想法?
您可能想詳細說明「流程」更詳細。這是服務器端的JavaScript? – 2009-02-17 01:13:25
Javascript代碼總是原子的,所以不需要鎖定或任何東西。請參閱[爲什麼我們沒有JavaScript中的併發控制工具?](http://uzairfarooq.github.io/why-no-concurrency-control-tool-in-javascript/)。 – 2015-07-17 17:13:06