Có một thứ như là một thử nghiệm và thiết lập nguyên tử, semaphore hoặc khóa trong Javascript không?Javascript semaphore/test-and-set/lock?
Tôi có javascript gọi quy trình nền không đồng bộ qua giao thức tùy chỉnh (quá trình nền thực sự chạy trong một quy trình riêng biệt, không liên quan đến trình duyệt). Tôi tin rằng tôi đang chạy vào một điều kiện chủng tộc; quá trình nền trả về giữa thử nghiệm của tôi và bộ của tôi, vặn vẹo mọi thứ ở phía bên javascript. Tôi cần một hoạt động thử nghiệm và thiết lập để biến nó trở thành một semaphore thực sự.
Dưới đây là các mã javascript mà cố gắng để phát hiện các tiến trình nền và xếp hàng họ lên:
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());
}
}
};
}();
Gọi là một singleton mà thực hiện các hàng đợi; bất cứ ai muốn gọi một quá trình bên ngoài không Call.call ("cái gì").
Bất kỳ ý tưởng nào?
Bạn có thể muốn chỉ định 'quy trình' của bạn chi tiết hơn. Đây có phải là javascript phía máy chủ không? –
Mã Javascript luôn là nguyên tử, vì vậy không cần phải khóa hoặc bất cứ thứ gì. Xem [Tại sao chúng ta không có công cụ kiểm soát tương tranh trong javascript?] (Http://uzairfarooq.github.io/why-no-concurrency-control-tool-in-javascript/). –