सेमाफोर (प्रोग्रामिंग)
कंप्यूटर विज्ञान में, एक सेमाफोर एक चर (प्रोग्रामिंग) या सार डेटा प्रकार है जिसका उपयोग कई प्रक्रियाओं (कंप्यूटिंग) द्वारा एक सामान्य संसाधन तक पहुंच को नियंत्रित करने के लिए किया जाता है और एक कंप्यूटर मल्टीटास्किंग ऑपरेटिंग सिस्टम जैसे समवर्ती संगणक वैज्ञानिक में महत्वपूर्ण खंड समस्याओं से बचा जाता है। सेमाफोर एक प्रकार का तुल्यकालन (कंप्यूटर विज्ञान) है। एक तुच्छ सेमाफोर एक सादा चर है जिसे प्रोग्रामर-परिभाषित स्थितियों के आधार पर बदला जाता है (उदाहरण के लिए, वृद्धि या कमी, या टॉगल)।
एक सेमाफोर के बारे में सोचने का एक उपयोगी तरीका, जैसा कि एक वास्तविक दुनिया प्रणाली में उपयोग किया जाता है, एक रिकॉर्ड के रूप में है कि किसी विशेष संसाधन की कितनी इकाइयाँ उपलब्ध हैं, उस रिकॉर्ड को 'सुरक्षित रूप से' समायोजित करने के लिए संचालन के साथ मिलकर (यानी, दौड़ की स्थिति स्थिति से बचने के लिए) ) इकाइयों के अधिग्रहण या मुक्त होने के रूप में, और, यदि आवश्यक हो, तब तक प्रतीक्षा करें जब तक कि संसाधन की एक इकाई उपलब्ध न हो जाए।
दौड़ स्थितियों की रोकथाम में सेमाफोर एक उपयोगी उपकरण है; हालाँकि, उनका उपयोग इस बात की गारंटी नहीं है कि कोई प्रोग्राम इन समस्याओं से मुक्त है। सेमाफोर जो मनमाने ढंग से संसाधनों की गणना की अनुमति देते हैं उन्हें काउंटिंग सेमाफोर कहा जाता है, जबकि सेमाफोर जो मान 0 और 1 (या लॉक/अनलॉक, अनुपलब्ध/उपलब्ध) तक सीमित हैं उन्हें बाइनरी सेमाफोर कहा जाता है और लॉक (कंप्यूटर विज्ञान) को लागू करने के लिए उपयोग किया जाता है।
सेमाफोर अवधारणा का आविष्कार 1962 या 1963 में डच लोगों के कंप्यूटर वैज्ञानिक एडवर्ड डिजस्ट्रा द्वारा किया गया था,[2] जब Dijkstra और उनकी टीम Electrologica X8 के लिए एक ऑपरेटिंग सिस्टम विकसित कर रहे थे। उस प्रणाली को अंततः मल्टीप्रोग्रामिंग सिस्टम के रूप में जाना जाने लगा।
पुस्तकालय सादृश्य
मान लीजिए कि एक भौतिक पुस्तकालय में एक समय में एक छात्र द्वारा उपयोग किए जाने वाले 10 समान अध्ययन कक्ष हैं। यदि छात्र अध्ययन कक्ष का उपयोग करना चाहते हैं तो उन्हें फ्रंट डेस्क से एक कमरे का अनुरोध करना होगा। यदि कोई कमरा खाली नहीं है, तो छात्र डेस्क पर तब तक प्रतीक्षा करते हैं जब तक कि कोई कमरा खाली नहीं कर देता। जब एक छात्र एक कमरे का उपयोग करना समाप्त कर लेता है, तो छात्र को डेस्क पर लौटना चाहिए और यह इंगित करना चाहिए कि एक कमरा खाली हो गया है।
सबसे सरल कार्यान्वयन में, रिसेप्शनिस्ट के क्लर्क को केवल उपलब्ध मुफ्त कमरों की संख्या के बारे में पता होता है, जिसे वे केवल तभी सही ढंग से जानते हैं जब सभी छात्र वास्तव में अपने कमरे का उपयोग करते हैं जब उन्होंने उनके लिए साइन अप किया होता है और जब वे काम पूरा कर लेते हैं तो उन्हें वापस कर देते हैं। जब कोई छात्र कमरे का अनुरोध करता है, तो क्लर्क इस संख्या को कम कर देता है। जब कोई छात्र कमरा खाली करता है, तो क्लर्क इस संख्या को बढ़ा देता है। कमरे का उपयोग जब तक चाहें तब तक किया जा सकता है, और इसलिए समय से पहले कमरे बुक करना संभव नहीं है।
इस परिदृश्य में फ्रंट डेस्क काउंट-होल्डर एक काउंटिंग सेमाफोर का प्रतिनिधित्व करता है, कमरे संसाधन हैं, और छात्र प्रक्रियाओं/धागों का प्रतिनिधित्व करते हैं। इस परिदृश्य में सेमाफोर का मान प्रारंभ में 10 है, जिसमें सभी कमरे खाली हैं। जब एक छात्र एक कमरे का अनुरोध करता है, तो उन्हें पहुंच प्रदान की जाती है, और सेमाफोर का मान 9 में बदल जाता है। अगले छात्र के आने के बाद, यह 8 तक गिर जाता है, फिर 7 और इसी तरह। यदि कोई कमरे का अनुरोध करता है और सेमाफोर का वर्तमान मान 0 है,[3] उन्हें तब तक इंतजार करने के लिए मजबूर किया जाता है जब तक कि एक कमरा खाली नहीं हो जाता (जब गिनती 0 से बढ़ जाती है)। यदि एक कमरा छोड़ दिया गया था, लेकिन कई छात्र प्रतीक्षा कर रहे हैं, तो किसी एक का चयन करने के लिए किसी भी विधि का उपयोग किया जा सकता है जो कमरे पर कब्जा करेगा (जैसे फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स) या बेतरतीब ढंग से एक को चुनना)। और निश्चित रूप से, एक छात्र को अपने कमरे को वास्तव में छोड़ने के बाद ही क्लर्क को सूचित करने की आवश्यकता होती है, अन्यथा, एक अजीब स्थिति हो सकती है जब ऐसे छात्र कमरे छोड़ने की प्रक्रिया में हों (वे अपनी पाठ्यपुस्तकें पैक कर रहे हों, आदि)। और उनके जाने से पहले एक अन्य छात्र कमरे में प्रवेश करता है।
महत्वपूर्ण अवलोकन
जब संसाधनों के एक पूल (कंप्यूटर विज्ञान) तक पहुंच को नियंत्रित करने के लिए उपयोग किया जाता है, तो एक सेमाफोर केवल यह ट्रैक करता है कि कितने संसाधन मुक्त हैं; यह ट्रैक नहीं करता है कि कौन से संसाधन निःशुल्क हैं। एक विशेष मुक्त संसाधन का चयन करने के लिए कुछ अन्य तंत्र (संभवतः अधिक सेमाफोर शामिल) की आवश्यकता हो सकती है।
प्रतिमान विशेष रूप से शक्तिशाली है क्योंकि सेमाफोर गिनती कई अलग-अलग क्रियाओं के लिए एक उपयोगी ट्रिगर के रूप में काम कर सकती है। उपरोक्त लाइब्रेरियन अध्ययन हॉल में रोशनी बंद कर सकता है जब कोई छात्र शेष नहीं होता है, या यह संकेत दे सकता है कि कमरे बहुत व्यस्त हैं जब अधिकांश कमरे भरे हुए हैं।
प्रोटोकॉल की सफलता के लिए अनुप्रयोगों को इसका सही ढंग से पालन करने की आवश्यकता होती है। निष्पक्षता और सुरक्षा से समझौता किए जाने की संभावना है (जिसका व्यावहारिक अर्थ है कि एक प्रोग्राम धीरे-धीरे व्यवहार कर सकता है, अनियमित रूप से कार्य कर सकता है, रुक सकता है (कंप्यूटिंग) या क्रैश (कंप्यूटिंग)) यदि एक भी प्रक्रिया गलत तरीके से कार्य करती है। यह भी शामिल है:
- किसी संसाधन का अनुरोध करना और उसे जारी करना भूल जाना;
- ऐसे संसाधन को जारी करना जिसका कभी अनुरोध नहीं किया गया था;
- किसी संसाधन को लंबे समय तक बिना आवश्यकता के रखना;
- पहले अनुरोध किए बिना (या इसे जारी करने के बाद) संसाधन का उपयोग करना।
यहां तक कि अगर सभी प्रक्रियाएं इन नियमों का पालन करती हैं, तब भी बहु-संसाधन गतिरोध तब भी हो सकता है जब अलग-अलग संसाधनों को अलग-अलग सेमाफोर द्वारा प्रबंधित किया जाता है और जब प्रक्रियाओं को एक समय में एक से अधिक संसाधनों का उपयोग करने की आवश्यकता होती है, जैसा कि डाइनिंग फिलोसोफर्स की समस्या से स्पष्ट होता है।
शब्दार्थ और कार्यान्वयन
काउंटिंग सेमाफोर दो संक्रियाओं से सुसज्जित हैं, जिन्हें ऐतिहासिक रूप से P और V के रूप में दर्शाया गया है (देखें § Operation names वैकल्पिक नामों के लिए)। ऑपरेशन V सेमाफोर S को बढ़ाता है, और ऑपरेशन P इसे घटाता है।
सेमाफोर एस का मान वर्तमान में उपलब्ध संसाधनों की इकाइयों की संख्या है। पी ऑपरेशन वेटिंग या नींद (सिस्टम कॉल) में व्यस्त है जब तक कि सेमाफोर द्वारा संरक्षित संसाधन उपलब्ध नहीं हो जाता है, जिस समय संसाधन का तुरंत दावा किया जाता है। V ऑपरेशन उलटा है: यह एक संसाधन को फिर से उपलब्ध कराता है जब प्रक्रिया का उपयोग समाप्त हो जाता है। सेमाफोर एस की एक महत्वपूर्ण संपत्ति यह है कि इसके मूल्य को वी और पी संचालनों का उपयोग करने के अलावा बदला नहीं जा सकता है।
समझने का एक सरल तरीका wait (पी) और signal (वी) संचालन है:
- wait: सेमाफोर चर के मान को 1 से घटाता है। यदि सेमाफोर चर का नया मान ऋणात्मक है, तो प्रक्रिया निष्पादित होती है wait अवरुद्ध है (यानी, सेमाफोर की कतार में जोड़ा गया)। अन्यथा, संसाधन की एक इकाई का उपयोग करके प्रक्रिया निष्पादन जारी रखती है।
- signal: सेमाफोर चर के मान को 1 से बढ़ाता है। वृद्धि के बाद, यदि पूर्व-वृद्धि मान ऋणात्मक था (मतलब संसाधन के लिए प्रतीक्षारत प्रक्रियाएं हैं), तो यह एक अवरुद्ध प्रक्रिया को सेमाफोर की प्रतीक्षा कतार से तैयार कतार में स्थानांतरित करता है।
कई ऑपरेटिंग सिस्टम कुशल सेमाफोर प्रिमिटिव प्रदान करते हैं जो सेमाफोर के बढ़ने पर प्रतीक्षा प्रक्रिया को अनब्लॉक करते हैं। इसका मतलब यह है कि प्रक्रिया अनावश्यक रूप से सेमाफोर मूल्य की जाँच करने में समय बर्बाद नहीं करती है।
काउंटिंग सेमाफोर अवधारणा को यूनिक्स में कार्यान्वित एक तकनीक सेमाफोर से एक से अधिक यूनिट का दावा करने या वापस करने की क्षमता के साथ बढ़ाया जा सकता है। संशोधित वी और पी संचालन निम्नानुसार हैं, परमाणु संचालन को इंगित करने के लिए स्क्वायर ब्रैकेट का उपयोग करना, यानी, संचालन जो अन्य प्रक्रियाओं के परिप्रेक्ष्य से अविभाज्य दिखाई देते हैं:
फ़ंक्शन वी (सेमाफोर एस, पूर्णांक I): [एस ← एस + मैं] समारोह पी (सेमाफोर एस, पूर्णांक I): दोहराना: [अगर एस ≥ मैं: एस ← एस - आई तोड़ना]
हालांकि, इस खंड का शेष भाग यूनरी वी और पी संचालन के साथ सेमाफोर को संदर्भित करता है, जब तक कि अन्यथा निर्दिष्ट न हो।
संसाधन भुखमरी से बचने के लिए, एक सेमाफोर में प्रक्रियाओं की एक संबद्ध कतार (डेटा संरचना) होती है (आमतौर पर FIFO (कंप्यूटिंग और इलेक्ट्रॉनिक्स) सिमेंटिक्स के साथ)। यदि कोई प्रक्रिया किसी सेमाफोर पर P ऑपरेशन करती है जिसका मान शून्य है, तो प्रक्रिया को सेमाफोर की कतार में जोड़ दिया जाता है और इसका निष्पादन निलंबित कर दिया जाता है। जब कोई अन्य प्रक्रिया V ऑपरेशन करके सेमाफोर को बढ़ाती है, और कतार में प्रक्रियाएँ होती हैं, तो उनमें से एक को कतार से हटा दिया जाता है और निष्पादन फिर से शुरू हो जाता है। जब प्रक्रियाओं की अलग-अलग प्राथमिकताएँ होती हैं, तो कतार को प्राथमिकता के आधार पर क्रमबद्ध किया जा सकता है, ताकि सर्वोच्च प्राथमिकता वाली प्रक्रिया कतार से पहले ली जाए।
यदि कार्यान्वयन वेतन वृद्धि, कमी और तुलना संचालन की परमाणुता सुनिश्चित नहीं करता है, तो वेतन वृद्धि या कमी को भूल जाने या सेमाफोर मूल्य के नकारात्मक होने का जोखिम होता है। एक मशीन निर्देश का उपयोग करके परमाणुता प्राप्त की जा सकती है जो पढ़ने-संशोधित-लिखने में सक्षम है। एक ही ऑपरेशन में सेमाफोर को पढ़ें, संशोधित करें और लिखें। ऐसे हार्डवेयर निर्देश के अभाव में, पारस्परिक बहिष्करण # सॉफ़्टवेयर समाधानों के उपयोग के माध्यम से एक परमाणु संचालन को संश्लेषित किया जा सकता है। यूनिप्रोसेसर सिस्टम पर, अस्थायी रूप से प्रीमेशन (कंप्यूटिंग) को निलंबित करके या हार्डवेयर बाधा डालना को अक्षम करके परमाणु संचालन सुनिश्चित किया जा सकता है। यह दृष्टिकोण मल्टीप्रोसेसर सिस्टम पर काम नहीं करता है जहां एक ही समय में अलग-अलग प्रोसेसर पर चलाने के लिए एक सेमाफोर साझा करने वाले दो प्रोग्राम संभव हैं। मल्टीप्रोसेसर सिस्टम में इस समस्या को हल करने के लिए सेमाफोर तक पहुंच को नियंत्रित करने के लिए लॉकिंग वैरिएबल का उपयोग किया जा सकता है। लॉकिंग वेरिएबल को टेस्ट-एंड-सेट | टेस्ट-एंड-सेट-लॉक कमांड का उपयोग करके हेरफेर किया जाता है।
उदाहरण
तुच्छ उदाहरण
एक वेरिएबल A और एक बूलियन वेरिएबल S पर विचार करें। A को तभी एक्सेस किया जाता है जब S को ट्रू मार्क किया जाता है। इस प्रकार, S, A के लिए एक सेमाफोर है।
एक ट्रेन स्टेशन (ए) से ठीक पहले एक स्टॉपलाइट सिग्नल (एस) की कल्पना कर सकता है। ऐसे में अगर सिग्नल हरा है, तो कोई ट्रेन स्टेशन में प्रवेश कर सकता है। यदि यह पीला या लाल (या कोई अन्य रंग) है, तो ट्रेन स्टेशन तक नहीं पहुँचा जा सकता है।
लॉगिन कतार
एक ऐसी प्रणाली पर विचार करें जो केवल दस उपयोगकर्ताओं (S = 10) का समर्थन कर सकती है। जब भी कोई उपयोगकर्ता लॉग इन करता है, पी को कॉल किया जाता है, सेमाफोर एस को 1 से कम कर दिया जाता है। जब भी कोई उपयोगकर्ता लॉग आउट करता है, वी को कॉल किया जाता है, उपलब्ध हो चुके लॉगिन स्लॉट का प्रतिनिधित्व करते हुए एस को 1 से बढ़ा दिया जाता है। जब S 0 होता है, तो लॉग इन करने के इच्छुक किसी भी उपयोगकर्ता को S बढ़ने तक प्रतीक्षा करनी चाहिए; एक स्लॉट मुक्त होने तक लॉगिन अनुरोध एक फीफो कतार पर लगाया जाता है। आपसी बहिष्कार का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि अनुरोधों को क्रम में रखा गया है। जब भी एस बढ़ता है (लॉगिन स्लॉट उपलब्ध है), एक लॉगिन अनुरोध को हटा दिया जाता है, और अनुरोध करने वाले उपयोगकर्ता को लॉग इन करने की अनुमति दी जाती है। यदि एस पहले से ही 0 से अधिक है, तो लॉगिन अनुरोध तुरंत हटा दिए जाते हैं।
निर्माता-उपभोक्ता समस्या
निर्माता-उपभोक्ता समस्या में, एक प्रक्रिया (निर्माता) डेटा आइटम उत्पन्न करती है और दूसरी प्रक्रिया (उपभोक्ता) उन्हें प्राप्त करती है और उनका उपयोग करती है। वे अधिकतम आकार N की कतार का उपयोग करके संचार करते हैं और निम्नलिखित शर्तों के अधीन हैं:
- कतार खाली होने पर उपभोक्ता को निर्माता के लिए कुछ उत्पादन करने की प्रतीक्षा करनी चाहिए;
- कतार पूरी होने पर निर्माता को उपभोक्ता द्वारा कुछ उपभोग करने की प्रतीक्षा करनी चाहिए।
निर्माता-उपभोक्ता समस्या का सेमाफोर समाधान कतार की स्थिति को दो सेमाफोर के साथ ट्रैक करता है: emptyCount
, कतार में खाली स्थानों की संख्या, और fullCount
, कतार में तत्वों की संख्या। अखंडता बनाए रखने के लिए, emptyCount
कतार में खाली स्थानों की वास्तविक संख्या से कम (लेकिन कभी अधिक नहीं) हो सकता है, और fullCount
कतार में वस्तुओं की वास्तविक संख्या की तुलना में कम (लेकिन कभी अधिक नहीं) हो सकता है। खाली स्थान और आइटम दो प्रकार के संसाधनों का प्रतिनिधित्व करते हैं, खाली बॉक्स और पूर्ण बॉक्स, और सेमाफोर emptyCount
और fullCount
इन संसाधनों पर नियंत्रण बनाए रखें।
बाइनरी सेमाफोर useQueue
यह सुनिश्चित करता है कि कतार की स्थिति की अखंडता से समझौता नहीं किया जाता है, उदाहरण के लिए दो उत्पादकों द्वारा एक साथ खाली कतार में आइटम जोड़ने का प्रयास किया जाता है, जिससे इसकी आंतरिक स्थिति दूषित हो जाती है। वैकल्पिक रूप से बाइनरी सेमाफोर के स्थान पर एक म्युटेक्स का उपयोग किया जा सकता है। emptyCount
ई> शुरू में एन है, fullCount
प्रारंभ में 0 है, और useQueue
प्रारंभ में 1 है।
निर्माता निम्नलिखित बार-बार करता है:
उत्पाद: पी (खाली गिनती) पी (उपयोग कतार) putItemIntoQueue (आइटम) वी (उपयोग कतार) वी (पूर्ण गणना)
उपभोक्ता निम्नलिखित बार-बार करता है
उपभोग करना: पी (पूर्ण गणना) पी (उपयोग कतार) आइटम ← getItemFromQueue () वी (उपयोग कतार) वी (खाली गिनती)
नीचे एक वास्तविक उदाहरण है:
- एक एकल उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश करता है। तब से
fullCount
0 है, उपभोक्ता ब्लॉक। - कई निर्माता निर्माता के महत्वपूर्ण खंड में प्रवेश करते हैं। एन उत्पादकों से अधिक कोई भी उनके महत्वपूर्ण खंड में प्रवेश नहीं कर सकता है
emptyCount
उनके प्रवेश पर रोक। - निर्माता, एक समय में, कतार तक पहुंच प्राप्त करते हैं
useQueue
और कतार में आइटम जमा करें। - एक बार जब पहला निर्माता अपने महत्वपूर्ण खंड से बाहर निकल जाता है,
fullCount
वृद्धि हुई है, जिससे एक उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश कर सकता है।
ध्यान दें कि emptyCount
कतार में खाली स्थानों की वास्तविक संख्या की तुलना में बहुत कम हो सकता है, उदाहरण के लिए जहां कई उत्पादकों ने इसे घटा दिया है लेकिन अपनी बारी का इंतजार कर रहे हैं useQueue
खाली जगह भरने से पहले ध्यान दें कि emptyCount + fullCount ≤ N
हमेशा समानता के साथ रखता है अगर और केवल अगर कोई निर्माता या उपभोक्ता अपने महत्वपूर्ण वर्गों को निष्पादित नहीं कर रहे हैं।
ऑपरेशन के नाम
विहित नाम वी और पी डच भाषा के शब्दों के पहले अक्षर से आते हैं। वी को आम तौर पर वेरोजेन (वृद्धि) के रूप में समझाया जाता है। पी के लिए कई स्पष्टीकरण पेश किए गए हैं, जिनमें प्रोब्रेन (परीक्षण या प्रयास करना) शामिल है,[4] पास (पास), और हड़पना (हड़पना)। इस विषय पर दिज्क्स्ट्रा का सबसे पहला पेपर[2]पी के अर्थ के रूप में पासिंग (पासिंग) देता है, और वी के अर्थ के रूप में व्रजगवे (रिलीज) देता है। इसमें यह भी उल्लेख किया गया है कि शब्दावली रेलवे सिग्नल में उपयोग की जाने वाली शब्दावली से ली गई है। दिज्क्स्ट्रा ने बाद में लिखा कि उनका इरादा पी को प्रोलाग के लिए खड़ा करना था,[5] प्रोबेरर ते वर्लगेन के लिए संक्षिप्त, शाब्दिक रूप से कम करने का प्रयास करें, या दूसरे मामले में उपयोग की जाने वाली शर्तों को समानांतर करने के लिए, कम करने का प्रयास करें।[6][7][8] ALGOL 68 में, लिनक्स कर्नेल,[9] और कुछ अंग्रेजी पाठ्यपुस्तकों में, V और P संक्रियाओं को क्रमशः ऊपर और नीचे कहा जाता है। सॉफ्टवेयर इंजीनियरिंग अभ्यास में, उन्हें अक्सर संकेत और प्रतीक्षा कहा जाता है,[10] जारी करना और प्राप्त करना[10] (जो कि मानक जावा (प्रोग्रामिंग भाषा) लाइब्रेरी है[11] का उपयोग करता है), या पोस्ट और पेंड। कुछ पाठ[12][13] उन्हें खाली करने के लिए कहें और मूल डच इनिशियल्स से मिलान करने के लिए खरीद लें।
सेमाफोरस बनाम म्यूटेक्स
एक म्युटेक्स एक म्युचुअल एक्सक्लूज़न#टाइप ऑफ़ म्यूच्यूअल एक्सक्लूज़न डिवाइस है जो कभी-कभी बाइनरी सेमाफोर के समान बुनियादी कार्यान्वयन का उपयोग करता है। उनके बीच का अंतर यह है कि उनका उपयोग कैसे किया जाता है। जबकि एक बाइनरी सेमाफोर को बोलचाल की भाषा में म्यूटेक्स के रूप में संदर्भित किया जा सकता है, एक सच्चे म्यूटेक्स में एक अधिक विशिष्ट उपयोग-मामला और परिभाषा होती है, जिसमें म्यूटेक्स को लॉक करने वाले टास्क (कंप्यूटिंग) को इसे अनलॉक करना होता है। इस बाधा का उद्देश्य सेमाफोर का उपयोग करने की कुछ संभावित समस्याओं से निपटना है:
- प्राथमिकता व्युत्क्रम: यदि म्यूटेक्स को पता है कि किसने इसे लॉक किया है और इसे अनलॉक करना है, तो उस कार्य की प्राथमिकता को बढ़ावा देना संभव है जब भी कोई उच्च-प्राथमिकता वाला कार्य म्यूटेक्स पर प्रतीक्षा करना शुरू करता है।
- समय से पहले कार्य समाप्ति: म्यूटेक्स विलोपन सुरक्षा भी प्रदान कर सकता है, जहां म्यूटेक्स को रखने वाले कार्य को गलती से हटाया नहीं जा सकता है।[citation needed]
- समाप्ति गतिरोध: यदि किसी कारण से म्यूटेक्स-होल्डिंग कार्य समाप्त हो जाता है, तो रीयल-टाइम ऑपरेटिंग सिस्टम इस स्थिति के म्यूटेक्स और सिग्नल प्रतीक्षा कार्यों को जारी कर सकता है।
- पुनरावर्तन गतिरोध: एक कार्य को एक पुनर्वित्त म्यूटेक्स को कई बार लॉक करने की अनुमति दी जाती है क्योंकि यह इसे समान संख्या में अनलॉक करता है।
- एक्सीडेंटल रिलीज़: म्यूटेक्स के रिलीज़ होने पर एक त्रुटि उत्पन्न होती है यदि रिलीज़ करने वाला कार्य उसका स्वामी नहीं है।
यह भी देखें
- तुल्यकालन (कंप्यूटर विज्ञान)
- सिगरेट पीने वालों की समस्या
- भोजन दार्शनिकों की समस्या
- पाठकों-लेखकों की समस्या
- नींद नाई की समस्या
- मॉनिटर (सिंक्रनाइज़ेशन)
- नकली जागना
संदर्भ
- ↑ Dijkstra, Edsger W. Over seinpalen (EWD-74) (PDF). E.W. Dijkstra Archive. Center for American History, University of Texas at Austin. (transcription)
- ↑ 2.0 2.1 Dijkstra, Edsger W. Over de sequentialiteit van procesbeschrijvingen (EWD-35) (PDF). E.W. Dijkstra Archive. Center for American History, University of Texas at Austin. (transcription) (undated, 1962 or 1963)
- ↑ The Little Book of Semaphores Allen B. Downey
- ↑ Silberschatz, Galvin & Gagne 2008, p. 234
- ↑ Dijkstra, Edsger W. EWD-74 (PDF). E.W. Dijkstra Archive. Center for American History, University of Texas at Austin. (transcription)
- ↑ Dijkstra, Edsger W. MULTIPROGAMMERING EN DE X8 (EWD-51) (PDF). E.W. Dijkstra Archive. Center for American History, University of Texas at Austin. (transcription) (in Dutch)
- ↑ Dijkstra's own translation reads "try-and-decrease", although that phrase might be confusing for those unaware of the colloquial "try-and..."
- ↑ (PATCH 1/19) MUTEX: Introduce simple mutex implementation Linux Kernel Mailing List, 19 December 2005
- ↑ Linux Kernel hacking HOWTO Archived 2010-05-28 at the Wayback Machine LinuxGrill.com
- ↑ 10.0 10.1 Mullender, Sape; Cox, Russ (2008). Semaphores in Plan 9 (PDF). 3rd International Workshop on Plan 9.
- ↑
java.util.concurrent.Semaphore
- ↑ "exec.library/Procure". amigadev.elowar.com. Retrieved 2016-09-19.
- ↑ "exec.library/Vacate". amigadev.elowar.com. Retrieved 2016-09-19.
बाहरी संबंध
परिचय
- हिल्सहाइमर, वोल्कर (2004)। रीड/राइट म्यूटेक्स लागू करना (वेब पेज)। क्यूटी तिमाही, अंक 11 - क्यू3 2004
- Zelenski, Julie; Parlante, Nick. "थ्रेड और सेमाफोर उदाहरण" (PDF). Handout. CS107 Programming Paradigms. Stanford Engineering Everwhere (SEE). Spring 2008 (23).
संदर्भ
- Dijkstra, Edsger W. Cooperating sequential processes (EWD-123) (PDF). E.W. Dijkstra Archive. Center for American History, University of Texas at Austin. (transcription) (September 1965)
- "semaphore.h - semaphores (REALTIME)". The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. Open Group. 2004.
- Downey, Allen B. (2016) [2005]. "The Little Book of Semaphores" (2nd ed.). Green Tea Press.
- Leppäjärvi, Jouni (May 11, 2008). "A pragmatic, historically oriented survey on the universality of synchronization primitives" (PDF). University of Oulu, Finland.