Est-il une telle chose comme un test atomique-et-jeu, sémaphore, ou d'un lock dans le Javascript?
J'ai javascript invocation asynchrone processus d'arrière-plan via un protocole personnalisé (le processus de fond littéralement s'exécute dans un processus distinct, sans rapport avec le navigateur). Je crois que je suis en cours d'exécution dans une condition de concurrence; les processus d'arrière-plan retours entre mon test et mon set, visser les choses sur le javascript côté. J'ai besoin d'un test-et-l'opération de l'ensemble pour en faire un véritable sémaphore.
Voici le code javascript qui tente de détecter les processus d'arrière-plan et mettre en file d'attente jusqu':
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());
}
}
};
}();
L'appel est un singleton qui met en œuvre les files d'attente; quelqu'un qui veut se prévaloir d'un processus externe fait Appel.call("quelque chose") .
Des idées?