मैं मल्टीथ्रेडिंग और साझा संसाधनों के उपयोग पर पढ़ रहा हूं और कई में से एक (मेरे लिए) नई अवधारणाएं म्यूटेक्स लॉक है। मुझे यह पता लगाना प्रतीत नहीं होता कि वास्तव में धागे के साथ क्या हो रहा है जो "महत्वपूर्ण खंड" को बंद कर देता है। यह कई स्थानों पर कहता है कि थ्रेड "अवरुद्ध" हो जाता है, लेकिन इसका क्या अर्थ है? क्या इसे निलंबित कर दिया गया है, और लॉक उठाए जाने पर फिर से शुरू होगा? या फिर "रन लूप" के अगले पुनरावृत्ति में फिर से प्रयास करेंगे?म्यूटेक्स लॉक: "अवरुद्ध" का अर्थ क्या है?
कारण मैं पूछता हूं, क्योंकि मैं सिस्टम आपूर्ति की गई घटनाओं (माउस, कीबोर्ड, इत्यादि) चाहता हूं, जो (मुख्य रूप से) मुख्य थ्रेड पर वितरित किया जाता है, जिसे रन लूप में एक बहुत ही विशिष्ट भाग में संभाला जा सकता है मेरे माध्यमिक धागे का। तो जो भी घटना वितरित की जाती है, मैं अपने स्वयं के डेटास्ट्रक्चर में कतार लगाता हूं। जाहिर है, डेटास्ट्रक्चर को म्यूटेक्स लॉक की आवश्यकता होती है क्योंकि इसे दोनों धागे द्वारा संशोधित किया जा रहा है। लापता पहेली-टुकड़ा है: मुख्य थ्रेड पर किसी फ़ंक्शन में कोई ईवेंट वितरित होने पर क्या होता है, मैं इसे कतार करना चाहता हूं, लेकिन कतार लॉक है? क्या मुख्य धागा निलंबित कर दिया जाएगा, या यह सिर्फ लॉक किए गए सेक्शन पर कूद जाएगा और दायरे से बाहर जाएगा (घटना खो रहा है)?
मुख्य रन लूप एप्लिकेशन को ड्राइव नहीं करता है। मैं मैक ओएसएक्स पर हूं और एक सीवीडिस्प्ले लिंक का उपयोग करता हूं जो प्रभावी रूप से एक अलग (उच्च प्राथमिकता) धागा उत्पन्न कर रहा है जो बदले में मेरे रन लूप को चलाएगा। घटनाक्रम, जैसा कि मैं इसे समझता हूं, मुख्य धागे पर वितरित किया जाएगा, इसलिए सिंक्रनाइज़ेशन क्रम में लगता है। – zmippie