Esiste qualcosa come un test-and-set, un semaforo o un blocco atomico in Javascript?semaforo JavaScript/test-and-set/lock?
Ho javascript che richiama processi in background asincroni tramite un protocollo personalizzato (il processo in background viene eseguito letteralmente in un processo separato, non correlato al browser). Credo di essere in una condizione di gara; il processo in background ritorna tra il mio test e il mio set, avvitando le cose sul lato javascript. Ho bisogno di un'operazione test-and-set per renderlo un vero semaforo.
Ecco il codice javascript che tenta di rilevare i processi in background e in coda:
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 è un Singleton che implementa la coda; chiunque voglia invocare un processo esterno chiama Call.call ("qualcosa").
Qualche idea?
È possibile specificare quale sia il "processo" più dettagliato. È questo javascript lato server? –
Il codice Javascript è sempre atomico, quindi non è necessario bloccare o altro. Vedi [Perché non abbiamo uno strumento di controllo della concorrenza in javascript?] (Http://uzairfarooq.github.io/why-no-concurrency-control-tool-in-javascript/). –