पुस्तक Silberschatz द्वारा ऑपरेटिंग सिस्टम सिद्धांतों, Galvin और गैग्ने अध्याय में TestAndSet() अनुदेश तुल्यकालन पर के लिए निम्नलिखित परिभाषा में शामिल हैम्युचुअल-बहिष्कार TestAndSet का उपयोग कर() अनुदेश
do {
while(TestAndSetLock(&lock))
; // do nothing
// critical section
lock = FALSE;
// remainder section
} while(TRUE);
अब, पारस्परिक अपवर्जन हासिल की है अगर वहाँ सही पर लक्ष्य स्थापित करने के लिए कोई शर्त है: ऊपर दिए गए निर्देश का उपयोग कर बहिष्कार भी इस प्रकार प्रदान की जाती है?
निम्न स्थिति पर विचार करें, प्रक्रिया P0 साझा चर लॉक को TRUE पर सेट करता है और इसके महत्वपूर्ण खंड में प्रवेश करता है। एक अन्य प्रक्रिया P1 ऊपर दिए गए लूप में TestAndSet() को कॉल करती है, यह TRUE लौटाती है (चूंकि पी 0 में लॉक है) जबकि बिना शर्त रूप से लॉक को FALSE पर सेट किया गया है। दूसरी बार टेस्ट एंडसेट() को लूप में बुलाया जाता है, यह वापस लौटाएगा और पी 1 इसके महत्वपूर्ण खंड में प्रवेश करेगा, भले ही पी 0 अपने महत्वपूर्ण खंड में है। फिर म्यूचुअल-बहिष्करण का उल्लंघन किया जाता है।
मैं कुछ खोज किया था और उन्होंने ही आचार्य और रॉबर्ट (उत्तरी केरोलिना राज्य विश्वविद्यालय सीएस विभाग के) Funderlic जो TestAndSet() के निम्नलिखित वैकल्पिक परिभाषा शामिल द्वारा एक कागज पर ठोकर खाई:
boolean Test-and-Set(boolean target)
begin
if(target == false):
target = true;
return target;
end
यह बहुत बनाता है मेरे लिए और अधिक समझ में, मैंने इसे तुलना के लिए भी शामिल किया और यह भी कि पेपर सिलबर्सचैट द्वारा पुस्तक को इसके संदर्भों में से एक के रूप में सूचीबद्ध करता है।
मुझे समझ में नहीं आता कि मेरी पाठ्य पुस्तक में जो परिभाषा मिली है (जिसे मैंने पहले प्रदान किया था) आपसी बहिष्कार को दूर करने के लिए उपयोग किया जा सकता है, क्या कोई मदद कर सकता है?
मुझे इस तथ्य में नहीं आया है कि TestAndSet() केवल तभी निष्पादित किया जाता है जब लक्ष्य गलत होता है। मैंने विकिपीडिया दोनों पाठ्यपुस्तक विज्ञापन की जांच की है। हालांकि, यह समझ में आता है, मैं इसे देख लूंगा। –
दिखाए गए उदाहरण में कोई अवरोध नहीं है, 'जबकि (टेस्ट एंडसेट())' लूप बस स्थिति में बदलाव होने तक स्पिन करता है। हालांकि यह सीपीयू का अपमानजनक है, लेकिन कुछ होने की प्रतीक्षा करते समय धागे वास्तव में * ब्लॉक नहीं करते हैं। अधिक संदर्भ के लिए विकिपीडिया पर "स्पिनलॉक" देखें। –