वहाँ एक परमाणु परीक्षण और सेट, सेमाफोर, या Javascript में ताला के रूप में ऐसी बात है?जावास्क्रिप्ट सेमफोर/टेस्ट-एंड-सेट/लॉक?
मैं एक कस्टम प्रोटोकॉल के माध्यम से जावास्क्रिप्ट लागू async पृष्ठभूमि प्रक्रियाओं है (पृष्ठभूमि प्रक्रिया सचमुच, एक अलग प्रक्रिया में चलता ब्राउज़र से संबंधित नहीं)। मेरा मानना है कि मैं दौड़ की स्थिति में दौड़ रहा हूं; बैकग्राउंड प्रक्रिया जावास्क्रिप्ट पक्ष पर चीजों को खराब करने, मेरे परीक्षण और मेरे सेट के बीच लौटती है। मुझे इसे एक वास्तविक सेमफोर बनाने के लिए एक परीक्षण-और-सेट ऑपरेशन की आवश्यकता है।
यहाँ जावास्क्रिप्ट कोड है कि पृष्ठभूमि प्रक्रियाओं का पता लगाने और उन्हें कतार के लिए प्रयास करता है:
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 ("कुछ") करता है।
कोई भी विचार?
आप यह निर्दिष्ट करना चाहते हैं कि आपकी 'प्रक्रिया' अधिक विस्तृत में क्या है। क्या यह सर्वर-साइड जावास्क्रिप्ट है? –
जावास्क्रिप्ट कोड हमेशा परमाणु है, इसलिए लॉक या कुछ भी करने की आवश्यकता नहीं है। देखें [जावास्क्रिप्ट में हमारे पास एक समवर्ती नियंत्रण उपकरण क्यों नहीं है?] (Http://uzairfarooq.github.io/why-no-concurrency-control-tool-in-javascript/)। –