मैं "लिनक्स डिवाइस ड्राइवर 3 संस्करण" पढ़ रहा हूं, समरूपता और दौड़ की स्थिति के बारे में अध्याय। एक उदाहरण है जिसे मैं पूरी तरह से समझ नहीं पा रहा हूं; वे कर्नेल प्रोग्रामिंग में एक सामान्य पैटर्न के बारे में बात कर रहे हैं, जब किसी को मौजूदा थ्रेड के बाहर गतिविधि शुरू करने की आवश्यकता होती है (fo rexample, new kernel thread या user process, मौजूदा प्रक्रिया के लिए अनुरोध, या हार्डवेयर आधारित क्रिया), उस गतिविधि के लिए प्रतीक्षा करें पूर्ण। बहुत प्रभावी नहीं समाधान का उदाहरण है:लिनक्स कर्नेल म्यूटेक्स
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
तब वे बाहरी कार्य का सुझाव अप कॉल करने के लिए (& sem) जब अपना काम किया जाता है।
मुझे समझ नहीं आता क्यों हम इसे इस तरह नहीं कर सकते है:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
बंद कर दिया राज्य में म्युटेक्स बनाने और उसके बाद काम के बाद म्युटेक्स प्राप्त करने के लिए शुरू कर दिया गया के लिए आवश्यक है क्यों है?
आप से सुनने के लिए उत्सुक खोज रहे हैं! धन्यवाद।
+1, लेकिन मैं इस शब्द का इस्तेमाल करना बेहतर होगा लगता है '' बजाय mutex' की semaphore'। सेमपुर: किसी भी धागे से ऊपर/नीचे हो सकता है। MUTEX: स्वामित्व है, केवल मालिक धागा लॉक mutex कर सकते हैं। इस मामले में हमें सेमफोर का उपयोग करने की आवश्यकता है, क्योंकि इसका उद्देश्य धागे के बीच संचार है ... – Vojta
@Vojita: मैं सहमत हूं। मैंने म्यूटेक्स शब्द का प्रयोग किया क्योंकि सवाल सैमफोर को म्यूटेक्स के रूप में संदर्भित करता है। –