टीएल; डीआर असेंशन ("कॉन्ट्रैक्ट") स्प्यूरियस वेकअप थ्रेड शेड्यूलर के वास्तविक रूप से मजबूत कार्यान्वयन के लिए अनुमति देने के लिए किया गया एक समझदार वास्तु निर्णय है।
"प्रदर्शन के विचार" यहाँ अप्रासंगिक हैं, ये सिर्फ गलतफहमी हैं जो एक प्रकाशित लेखकीय संदर्भ में कहे जाने के कारण व्यापक हो गए। (आधिकारिक संदर्भ में त्रुटियां हो सकती हैं, y'know - बस गैलीलियो गैलीली से पूछें ) विकिपीडिया लेख आपके द्वारा उद्धृत नोट का संदर्भ केवल इसलिए रखता है क्योंकि यह प्रकाशित संदर्भ का हवाला देते हुए उनके औपचारिक दिशानिर्देशों से पूरी तरह मेल खाता है।
एसओ पर इस उत्तर में स्पूर्शियस वेकअप की अवधारणा को पेश करने के लिए बहुत अधिक सम्मोहक कारण प्रदान किया गया है जो कि बहुत ही लेख के (पुराने संस्करण) में प्रदान किए गए अतिरिक्त विवरणों पर आधारित है:
विचित्र लेखों पर विकिपीडिया लेख में यह tidbit है:
pthread_cond_wait()
लिनक्स में समारोह का उपयोग कर कार्यान्वित किया जाता है futex
सिस्टम कॉल। EINTR
जब सिस्टम सिग्नल प्राप्त करता है, तो लिनक्स पर प्रत्येक ब्लॉकिंग सिस्टम कॉल अचानक लौटता है । ... pthread_cond_wait()
प्रतीक्षा को पुनः आरंभ नहीं किया जा सकता है क्योंकि यह futex
सिस्टम कॉल के बाहर होने पर थोड़े समय में एक वास्तविक वेकअप याद कर सकता है ...
जरा सोचिए ... किसी भी कोड की तरह, थ्रेड शेड्यूलर अंतर्निहित हार्डवेयर / सॉफ़्टवेयर में कुछ असामान्य होने के कारण अस्थायी ब्लैकआउट का अनुभव कर सकता है। बेशक, इस बात का ध्यान रखा जाना चाहिए कि ऐसा कम से कम संभव हो, लेकिन चूंकि 100% मजबूत सॉफ़्टवेयर जैसी कोई चीज़ नहीं है, इसलिए यह मान लेना उचित होगा कि अगर ऐसा हो सकता है तो शेड्यूलर का पता लगाने के मामले में सुशोभित वसूली पर ध्यान दें (जैसे गायब दिल की धड़कन को देखकर )।
अब, शेड्यूलर कैसे पुनर्प्राप्त कर सकता है, इस बात को ध्यान में रखते हुए कि ब्लैकआउट के दौरान वेटिंग थ्रेड्स को सूचित करने के उद्देश्य से कुछ संकेतों को याद कर सकता है? यदि अनुसूचक कुछ भी नहीं करता है, तो "अनलकी" धागे केवल लटकाए जाएंगे, हमेशा के लिए इंतजार करेंगे - इससे बचने के लिए, अनुसूचक बस सभी प्रतीक्षा धागे को संकेत भेजेगा।
यह एक "अनुबंध" स्थापित करने के लिए आवश्यक बनाता है कि वेटिंग थ्रेड को बिना किसी कारण के अधिसूचित किया जा सकता है। सटीक होने के लिए, एक कारण होगा - शेड्यूलर ब्लैकआउट - लेकिन चूंकि थ्रेड डिज़ाइन किया गया है (एक अच्छे कारण के लिए) शेड्यूलर आंतरिक कार्यान्वयन विवरण से अनजान होने के कारण, इस कारण को "सहज" के रूप में पेश करने के लिए बेहतर है।
थ्रेड परिप्रेक्ष्य से, यह कुछ हद तक एक पोस्टल कानून (उर्फ मजबूती सिद्धांत ) जैसा दिखता है ,
आप जो करते हैं उसमें रूढ़िवादी हो सकते हैं, जो आप दूसरों से स्वीकार करते हैं, उसमें उदार रहें
गंभीर वेकप्स की गणना थ्रेड को रूढ़िवादी होने के लिए मजबूर करती है कि वह क्या करता है : अन्य थ्रेड्स को सूचित करते समय स्थिति सेट करें, और जो इसे स्वीकार करता है उसमें उदारता : प्रतीक्षा से किसी भी वापसी पर स्थिति की जांच करें और प्रतीक्षा करें कि अगर यह अभी तक नहीं है, तब तक प्रतीक्षा करें।