सेमाफोर (प्रोग्रामिंग): Difference between revisions
(Created page with "{{about|the computer programming term|other uses|Semaphore (disambiguation)}} File:Rail-semaphore-signal-Dave-F.jpg|thumb|एक [[रेलवे सेमाफोर स...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{about| | {{about|कंप्यूटर प्रोग्रामिंग शब्द|अन्य उपयोग|सेमाफोर (बहुविकल्पी)}} | ||
[[File:Rail-semaphore-signal-Dave-F.jpg|thumb|एक [[रेलवे सेमाफोर सिग्नल]] ({{lang-nl|seinpaal}}, दिज्क्स्ट्रा के मूल विवरण में प्रयुक्त शब्द<ref>{{Cite EWD|74|Over seinpalen}}</ref>).]] | [[File:Rail-semaphore-signal-Dave-F.jpg|thumb|एक [[रेलवे सेमाफोर सिग्नल|रेलवे सेमाफोर संकेत]] ({{lang-nl|seinpaal}}, दिज्क्स्ट्रा के मूल विवरण में प्रयुक्त शब्द<ref>{{Cite EWD|74|Over seinpalen}}</ref>).]] | ||
{{short description|Variable used in a concurrent system}} | {{short description|Variable used in a concurrent system}} | ||
[[कंप्यूटर विज्ञान]] में, एक सेमाफोर एक [[चर (प्रोग्रामिंग)]] या [[सार डेटा प्रकार]] है जिसका उपयोग कई प्रक्रियाओं (कंप्यूटिंग) द्वारा एक सामान्य संसाधन तक पहुंच को नियंत्रित करने के लिए किया जाता है और एक [[कंप्यूटर मल्टीटास्किंग]] ऑपरेटिंग सिस्टम जैसे समवर्ती [[संगणक वैज्ञानिक]] में महत्वपूर्ण खंड समस्याओं से बचा जाता है। सेमाफोर एक प्रकार का [[तुल्यकालन (कंप्यूटर विज्ञान)]] है। एक तुच्छ सेमाफोर एक सादा चर है जिसे प्रोग्रामर-परिभाषित स्थितियों के आधार पर बदला जाता है (उदाहरण के लिए, वृद्धि या कमी, या टॉगल)। | [[कंप्यूटर विज्ञान]] में, एक सेमाफोर एक [[चर (प्रोग्रामिंग)]] या [[सार डेटा प्रकार]] है जिसका उपयोग कई प्रक्रियाओं (कंप्यूटिंग) द्वारा एक सामान्य संसाधन तक पहुंच को नियंत्रित करने के लिए किया जाता है और एक [[कंप्यूटर मल्टीटास्किंग]] ऑपरेटिंग सिस्टम जैसे समवर्ती [[संगणक वैज्ञानिक]] में महत्वपूर्ण खंड समस्याओं से बचा जाता है। सेमाफोर एक प्रकार का [[तुल्यकालन (कंप्यूटर विज्ञान)]] है। एक तुच्छ सेमाफोर एक सादा चर है जिसे प्रोग्रामर-परिभाषित स्थितियों के आधार पर बदला जाता है (उदाहरण के लिए, वृद्धि या कमी, या टॉगल)। | ||
एक सेमाफोर के बारे में सोचने का एक उपयोगी तरीका, जैसा कि एक वास्तविक दुनिया प्रणाली में उपयोग किया जाता है, एक रिकॉर्ड के रूप में है कि किसी विशेष संसाधन की कितनी इकाइयाँ उपलब्ध हैं, उस रिकॉर्ड को 'सुरक्षित रूप से' समायोजित करने के लिए संचालन के साथ मिलकर (यानी, [[दौड़ की स्थिति]] | एक सेमाफोर के बारे में सोचने का एक उपयोगी तरीका, जैसा कि एक वास्तविक दुनिया प्रणाली में उपयोग किया जाता है, एक रिकॉर्ड के रूप में है कि किसी विशेष संसाधन की कितनी इकाइयाँ उपलब्ध हैं, उस रिकॉर्ड को 'सुरक्षित रूप से' समायोजित करने के लिए संचालन के साथ मिलकर (यानी, [[दौड़ की स्थिति]] से बचने के लिए) ) इकाइयों के अधिग्रहण या मुक्त होने के रूप में, और, यदि आवश्यक हो, तब तक प्रतीक्षा करें जब तक कि संसाधन की एक इकाई उपलब्ध न हो जाए। | ||
दौड़ स्थितियों की रोकथाम में सेमाफोर एक उपयोगी उपकरण है; हालाँकि, उनका उपयोग इस बात की गारंटी नहीं है कि कोई प्रोग्राम इन समस्याओं से मुक्त है। सेमाफोर जो मनमाने ढंग से संसाधनों की गणना की अनुमति देते हैं उन्हें काउंटिंग सेमाफोर कहा जाता है, जबकि सेमाफोर जो मान 0 और 1 (या लॉक/अनलॉक, अनुपलब्ध/उपलब्ध) तक सीमित हैं उन्हें बाइनरी सेमाफोर कहा जाता है और लॉक (कंप्यूटर विज्ञान) को लागू करने के लिए उपयोग किया जाता है। | दौड़ स्थितियों की रोकथाम में सेमाफोर एक उपयोगी उपकरण है; हालाँकि, उनका उपयोग इस बात की गारंटी नहीं है कि कोई प्रोग्राम इन समस्याओं से मुक्त है। सेमाफोर जो मनमाने ढंग से संसाधनों की गणना की अनुमति देते हैं उन्हें काउंटिंग सेमाफोर कहा जाता है, जबकि सेमाफोर जो मान 0 और 1 (या लॉक/अनलॉक, अनुपलब्ध/उपलब्ध) तक सीमित हैं उन्हें बाइनरी सेमाफोर कहा जाता है और लॉक (कंप्यूटर विज्ञान) को लागू करने के लिए उपयोग किया जाता है। | ||
सेमाफोर अवधारणा का आविष्कार 1962 या 1963 में [[डच लोग]]ों के कंप्यूटर वैज्ञानिक [[एडवर्ड डिजस्ट्रा]] द्वारा किया गया था,<ref name="ReferenceA">{{Cite EWD|35|Over de sequentialiteit van procesbeschrijvingen}} (undated, 1962 or 1963)</ref> जब | सेमाफोर अवधारणा का आविष्कार 1962 या 1963 में [[डच लोग]]ों के कंप्यूटर वैज्ञानिक [[एडवर्ड डिजस्ट्रा]] द्वारा किया गया था,<ref name="ReferenceA">{{Cite EWD|35|Over de sequentialiteit van procesbeschrijvingen}} (undated, 1962 or 1963)</ref> जब डिज्कस्ट्रा और उनकी टीम [[Electrologica X8|इलेक्ट्रोलॉजिका X8]] के लिए एक [[ऑपरेटिंग सिस्टम]] विकसित कर रहे थे। उस प्रणाली को अंततः [[मल्टीप्रोग्रामिंग सिस्टम]] के रूप में जाना जाने लगा। | ||
== [[पुस्तकालय]] सादृश्य == | == [[पुस्तकालय]] सादृश्य == | ||
Line 16: | Line 16: | ||
सबसे सरल कार्यान्वयन में, [[रिसेप्शनिस्ट]] के [[क्लर्क]] को केवल उपलब्ध मुफ्त कमरों की संख्या के बारे में पता होता है, जिसे वे केवल तभी सही ढंग से जानते हैं जब सभी छात्र वास्तव में अपने कमरे का उपयोग करते हैं जब उन्होंने उनके लिए साइन अप किया होता है और जब वे काम पूरा कर लेते हैं तो उन्हें वापस कर देते हैं। जब कोई छात्र कमरे का अनुरोध करता है, तो क्लर्क इस संख्या को कम कर देता है। जब कोई छात्र कमरा खाली करता है, तो क्लर्क इस संख्या को बढ़ा देता है। कमरे का उपयोग जब तक चाहें तब तक किया जा सकता है, और इसलिए समय से पहले कमरे बुक करना संभव नहीं है। | सबसे सरल कार्यान्वयन में, [[रिसेप्शनिस्ट]] के [[क्लर्क]] को केवल उपलब्ध मुफ्त कमरों की संख्या के बारे में पता होता है, जिसे वे केवल तभी सही ढंग से जानते हैं जब सभी छात्र वास्तव में अपने कमरे का उपयोग करते हैं जब उन्होंने उनके लिए साइन अप किया होता है और जब वे काम पूरा कर लेते हैं तो उन्हें वापस कर देते हैं। जब कोई छात्र कमरे का अनुरोध करता है, तो क्लर्क इस संख्या को कम कर देता है। जब कोई छात्र कमरा खाली करता है, तो क्लर्क इस संख्या को बढ़ा देता है। कमरे का उपयोग जब तक चाहें तब तक किया जा सकता है, और इसलिए समय से पहले कमरे बुक करना संभव नहीं है। | ||
इस परिदृश्य में फ्रंट डेस्क काउंट-होल्डर एक काउंटिंग सेमाफोर का प्रतिनिधित्व करता है, कमरे संसाधन हैं, और छात्र प्रक्रियाओं/धागों का प्रतिनिधित्व करते हैं। इस परिदृश्य में सेमाफोर का मान प्रारंभ में 10 है, जिसमें सभी कमरे खाली हैं। जब एक छात्र एक कमरे का अनुरोध करता है, तो उन्हें पहुंच प्रदान की जाती है, और सेमाफोर का मान 9 में बदल जाता है। अगले छात्र के आने के बाद, यह 8 तक गिर जाता है, फिर 7 और इसी तरह। यदि कोई कमरे का अनुरोध करता है और सेमाफोर का वर्तमान मान 0 है,<ref>[http://greenteapress.com/semaphores/ ''The Little Book of Semaphores''] Allen B. Downey</ref> उन्हें तब तक इंतजार करने के लिए मजबूर किया जाता है जब तक कि एक कमरा खाली नहीं हो जाता (जब गिनती 0 से बढ़ जाती है)। यदि एक कमरा छोड़ दिया गया था, लेकिन कई छात्र प्रतीक्षा कर रहे हैं, तो किसी एक का चयन करने के लिए किसी भी विधि का उपयोग किया जा सकता है जो कमरे पर कब्जा करेगा (जैसे [[फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स)]] या बेतरतीब ढंग से एक को चुनना)। और निश्चित रूप से, एक छात्र को अपने कमरे को वास्तव में छोड़ने के बाद ही क्लर्क को सूचित करने की आवश्यकता होती है, अन्यथा, एक अजीब स्थिति हो सकती है जब ऐसे छात्र कमरे छोड़ने की प्रक्रिया में हों (वे अपनी पाठ्यपुस्तकें | इस परिदृश्य में फ्रंट डेस्क काउंट-होल्डर एक काउंटिंग सेमाफोर का प्रतिनिधित्व करता है, कमरे संसाधन हैं, और छात्र प्रक्रियाओं/धागों का प्रतिनिधित्व करते हैं। इस परिदृश्य में सेमाफोर का मान प्रारंभ में 10 है, जिसमें सभी कमरे खाली हैं। जब एक छात्र एक कमरे का अनुरोध करता है, तो उन्हें पहुंच प्रदान की जाती है, और सेमाफोर का मान 9 में बदल जाता है। अगले छात्र के आने के बाद, यह 8 तक गिर जाता है, फिर 7 और इसी तरह। यदि कोई कमरे का अनुरोध करता है और सेमाफोर का वर्तमान मान 0 है,<ref>[http://greenteapress.com/semaphores/ ''The Little Book of Semaphores''] Allen B. Downey</ref> उन्हें तब तक इंतजार करने के लिए मजबूर किया जाता है जब तक कि एक कमरा खाली नहीं हो जाता (जब गिनती 0 से बढ़ जाती है)। यदि एक कमरा छोड़ दिया गया था, लेकिन कई छात्र प्रतीक्षा कर रहे हैं, तो किसी एक का चयन करने के लिए किसी भी विधि का उपयोग किया जा सकता है जो कमरे पर कब्जा करेगा (जैसे [[फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स)]] या बेतरतीब ढंग से एक को चुनना)। और निश्चित रूप से, एक छात्र को अपने कमरे को वास्तव में छोड़ने के बाद ही क्लर्क को सूचित करने की आवश्यकता होती है, अन्यथा, एक अजीब स्थिति हो सकती है जब ऐसे छात्र कमरे छोड़ने की प्रक्रिया में हों (वे अपनी पाठ्यपुस्तकें बाँध रहे हों, आदि)। और उनके जाने से पहले एक अन्य छात्र कमरे में प्रवेश करता है। | ||
=== महत्वपूर्ण अवलोकन === | === महत्वपूर्ण अवलोकन === | ||
जब संसाधनों के एक [[पूल (कंप्यूटर विज्ञान)]] तक पहुंच को नियंत्रित करने के लिए उपयोग किया जाता है, तो एक सेमाफोर केवल यह ट्रैक करता है कि कितने संसाधन मुक्त हैं; यह ट्रैक नहीं करता है कि कौन से संसाधन निःशुल्क हैं। एक विशेष मुक्त संसाधन का चयन करने के लिए कुछ अन्य तंत्र (संभवतः अधिक सेमाफोर | जब संसाधनों के एक [[पूल (कंप्यूटर विज्ञान)]] तक पहुंच को नियंत्रित करने के लिए उपयोग किया जाता है, तो एक सेमाफोर केवल यह ट्रैक करता है कि कितने संसाधन मुक्त हैं; यह ट्रैक नहीं करता है कि कौन से संसाधन निःशुल्क हैं। एक विशेष मुक्त संसाधन का चयन करने के लिए कुछ अन्य तंत्र (संभवतः अधिक सेमाफोर सम्मिलित ) की आवश्यकता हो सकती है। | ||
प्रतिमान विशेष रूप से शक्तिशाली है क्योंकि सेमाफोर गिनती कई अलग-अलग क्रियाओं के लिए एक उपयोगी ट्रिगर के रूप में काम कर सकती है। उपरोक्त | प्रतिमान विशेष रूप से शक्तिशाली है क्योंकि सेमाफोर गिनती कई अलग-अलग क्रियाओं के लिए एक उपयोगी ट्रिगर के रूप में काम कर सकती है। उपरोक्त पुस्तकालय अध्यक्ष अध्ययन हॉल में रोशनी बंद कर सकता है जब कोई छात्र शेष नहीं होता है, या यह संकेत दे सकता है कि कमरे बहुत व्यस्त हैं जब अधिकांश कमरे भरे हुए हैं। | ||
प्रोटोकॉल की सफलता के लिए अनुप्रयोगों को इसका सही ढंग से पालन करने की आवश्यकता होती है। निष्पक्षता और सुरक्षा से समझौता किए जाने की संभावना है (जिसका व्यावहारिक अर्थ है कि एक प्रोग्राम धीरे-धीरे व्यवहार कर सकता है, अनियमित रूप से कार्य कर सकता है, रुक सकता है (कंप्यूटिंग) या [[क्रैश (कंप्यूटिंग)]]) यदि एक भी प्रक्रिया गलत तरीके से कार्य करती है। यह भी | प्रोटोकॉल की सफलता के लिए अनुप्रयोगों को इसका सही ढंग से पालन करने की आवश्यकता होती है। निष्पक्षता और सुरक्षा से समझौता किए जाने की संभावना है (जिसका व्यावहारिक अर्थ है कि एक प्रोग्राम धीरे-धीरे व्यवहार कर सकता है, अनियमित रूप से कार्य कर सकता है, रुक सकता है (कंप्यूटिंग) या [[क्रैश (कंप्यूटिंग)]]) यदि एक भी प्रक्रिया गलत तरीके से कार्य करती है। यह भी सम्मिलित है: | ||
* किसी संसाधन का अनुरोध करना और उसे | * किसी संसाधन का अनुरोध करना और उसे प्रचलित करना भूल जाना; | ||
* ऐसे संसाधन को | * ऐसे संसाधन को प्रचलित करना जिसका कभी अनुरोध नहीं किया गया था; | ||
* किसी संसाधन को लंबे समय तक बिना आवश्यकता के रखना; | * किसी संसाधन को लंबे समय तक बिना आवश्यकता के रखना; | ||
* पहले अनुरोध किए बिना (या इसे | * पहले अनुरोध किए बिना (या इसे प्रचलित करने के बाद) संसाधन का उपयोग करना। | ||
यहां तक कि अगर सभी प्रक्रियाएं इन नियमों का पालन करती हैं, तब भी बहु-संसाधन [[गतिरोध]] तब भी हो सकता है जब अलग-अलग संसाधनों को अलग-अलग सेमाफोर द्वारा प्रबंधित किया जाता है और जब प्रक्रियाओं को एक समय में एक से अधिक संसाधनों का उपयोग करने की आवश्यकता होती है, जैसा कि डाइनिंग फिलोसोफर्स की समस्या से स्पष्ट होता है। | यहां तक कि अगर सभी प्रक्रियाएं इन नियमों का पालन करती हैं, तब भी बहु-संसाधन [[गतिरोध]] तब भी हो सकता है जब अलग-अलग संसाधनों को अलग-अलग सेमाफोर द्वारा प्रबंधित किया जाता है और जब प्रक्रियाओं को एक समय में एक से अधिक संसाधनों का उपयोग करने की आवश्यकता होती है, जैसा कि डाइनिंग फिलोसोफर्स की समस्या से स्पष्ट होता है। | ||
== शब्दार्थ और कार्यान्वयन == | == शब्दार्थ और कार्यान्वयन == | ||
काउंटिंग सेमाफोर दो संक्रियाओं से सुसज्जित हैं, जिन्हें ऐतिहासिक रूप से | काउंटिंग सेमाफोर दो संक्रियाओं से सुसज्जित हैं, जिन्हें ऐतिहासिक रूप से पी और वी के रूप में दर्शाया गया है (देखें {{section link||ऑपरेशन के नाम}} वैकल्पिक नामों के लिए)। ऑपरेशन वी सेमाफोर एस को बढ़ाता है, और ऑपरेशन पी इसे घटाता है। | ||
सेमाफोर एस का मान वर्तमान में उपलब्ध संसाधनों की इकाइयों की संख्या है। पी ऑपरेशन वेटिंग या [[ नींद (सिस्टम कॉल) ]] में व्यस्त है जब तक कि सेमाफोर द्वारा संरक्षित संसाधन उपलब्ध नहीं हो जाता है, जिस समय संसाधन का तुरंत दावा किया जाता है। वी ऑपरेशन उलटा है: यह एक संसाधन को फिर से उपलब्ध कराता है जब प्रक्रिया का उपयोग समाप्त हो जाता है। | |||
सेमाफोर एस की एक महत्वपूर्ण संपत्ति यह है कि इसके मूल्य को वी और पी संचालनों का उपयोग करने के अलावा बदला नहीं जा सकता है। | सेमाफोर एस की एक महत्वपूर्ण संपत्ति यह है कि इसके मूल्य को वी और पी संचालनों का उपयोग करने के अलावा बदला नहीं जा सकता है। | ||
समझने का एक सरल तरीका {{mono| | समझने का एक सरल तरीका {{mono|प्रतीक्षा }} (पी) और {{mono|संकेत}} (वी) संचालन है: | ||
* {{mono| | * {{mono| प्रतीक्षा}}: सेमाफोर चर के मान को 1 से घटाता है। यदि सेमाफोर चर का नया मान ऋणात्मक है, तो प्रक्रिया निष्पादित होती है {{mono| प्रतीक्षा}} अवरुद्ध है (यानी, सेमाफोर की पंक्ति में जोड़ा गया)। अन्यथा, संसाधन की एक इकाई का उपयोग करके प्रक्रिया निष्पादन प्रचलित रखती है। | ||
* {{mono| | * {{mono|संकेत}}: सेमाफोर चर के मान को 1 से बढ़ाता है। वृद्धि के बाद, यदि पूर्व-वृद्धि मान ऋणात्मक था (मतलब संसाधन के लिए प्रतीक्षारत प्रक्रियाएं हैं), तो यह एक अवरुद्ध प्रक्रिया को सेमाफोर की प्रतीक्षा पंक्ति से तैयार पंक्ति में स्थानांतरित करता है। | ||
कई ऑपरेटिंग सिस्टम कुशल सेमाफोर प्रिमिटिव प्रदान करते हैं जो सेमाफोर के बढ़ने पर प्रतीक्षा प्रक्रिया को अनब्लॉक करते हैं। इसका मतलब यह है कि प्रक्रिया अनावश्यक रूप से सेमाफोर मूल्य की जाँच करने में समय बर्बाद नहीं करती है। | कई ऑपरेटिंग सिस्टम कुशल सेमाफोर प्रिमिटिव प्रदान करते हैं जो सेमाफोर के बढ़ने पर प्रतीक्षा प्रक्रिया को अनब्लॉक करते हैं। इसका मतलब यह है कि प्रक्रिया अनावश्यक रूप से सेमाफोर मूल्य की जाँच करने में समय बर्बाद नहीं करती है। | ||
काउंटिंग सेमाफोर अवधारणा को [[यूनिक्स]] में कार्यान्वित एक | काउंटिंग सेमाफोर अवधारणा को [[यूनिक्स]] में कार्यान्वित एक यांत्रिकी सेमाफोर से एक से अधिक यूनिट का दावा करने या वापस करने की क्षमता के साथ बढ़ाया जा सकता है। संशोधित वी और पी संचालन निम्नानुसार हैं, [[परमाणु संचालन]] को इंगित करने के लिए स्क्वायर ब्रैकेट का उपयोग करना, यानी, संचालन जो अन्य प्रक्रियाओं के परिप्रेक्ष्य से अविभाज्य दिखाई देते हैं: | ||
फ़ंक्शन वी (सेमाफोर एस, पूर्णांक | फ़ंक्शन वी (सेमाफोर एस, पूर्णांक आई): | ||
[एस ← एस + | [एस ← एस + आई] | ||
समारोह पी (सेमाफोर एस, पूर्णांक | समारोह पी (सेमाफोर एस, पूर्णांक आई): | ||
दोहराना: | दोहराना: | ||
[अगर एस ≥ | [अगर एस ≥ आई: | ||
एस ← एस - आई | एस ← एस - आई | ||
तोड़ना] | तोड़ना] | ||
Line 56: | Line 57: | ||
हालांकि, इस खंड का शेष भाग यूनरी वी और पी संचालन के साथ सेमाफोर को संदर्भित करता है, जब तक कि अन्यथा निर्दिष्ट न हो। | हालांकि, इस खंड का शेष भाग यूनरी वी और पी संचालन के साथ सेमाफोर को संदर्भित करता है, जब तक कि अन्यथा निर्दिष्ट न हो। | ||
[[संसाधन भुखमरी]] से बचने के लिए, एक सेमाफोर में प्रक्रियाओं की एक संबद्ध [[कतार (डेटा संरचना)]] होती है ( | [[संसाधन भुखमरी]] से बचने के लिए, एक सेमाफोर में प्रक्रियाओं की एक संबद्ध [[कतार (डेटा संरचना)|पंक्ति (डेटा संरचना)]] होती है (प्रायः एफआईएफओ (कंप्यूटिंग और इलेक्ट्रॉनिक्स) सिमेंटिक्स के साथ)। यदि कोई प्रक्रिया किसी सेमाफोर पर पी ऑपरेशन करती है जिसका मान शून्य है, तो प्रक्रिया को सेमाफोर की पंक्ति में जोड़ दिया जाता है और इसका निष्पादन निलंबित कर दिया जाता है। जब कोई अन्य प्रक्रिया वी ऑपरेशन करके सेमाफोर को बढ़ाती है, और पंक्ति में प्रक्रियाएँ होती हैं, तो उनमें से एक को पंक्ति से हटा दिया जाता है और निष्पादन फिर से प्रारम्भ हो जाता है। जब प्रक्रियाओं की अलग-अलग प्राथमिकताएँ होती हैं, तो पंक्ति को प्राथमिकता के आधार पर क्रमबद्ध किया जा सकता है, ताकि सर्वोच्च प्राथमिकता वाली प्रक्रिया पंक्ति से पहले ली जाए। | ||
यदि कार्यान्वयन वेतन वृद्धि, कमी और तुलना संचालन की परमाणुता सुनिश्चित नहीं करता है, तो वेतन वृद्धि या कमी को भूल जाने या सेमाफोर मूल्य के नकारात्मक होने का जोखिम होता है। एक मशीन निर्देश का उपयोग करके परमाणुता प्राप्त की जा सकती है जो पढ़ने-संशोधित-लिखने में सक्षम है। एक ही ऑपरेशन में सेमाफोर को पढ़ें, संशोधित करें और लिखें। ऐसे हार्डवेयर निर्देश के अभाव में, पारस्परिक बहिष्करण | यदि कार्यान्वयन वेतन वृद्धि, कमी और तुलना संचालन की परमाणुता सुनिश्चित नहीं करता है, तो वेतन वृद्धि या कमी को भूल जाने या सेमाफोर मूल्य के नकारात्मक होने का जोखिम होता है। एक मशीन निर्देश का उपयोग करके परमाणुता प्राप्त की जा सकती है जो पढ़ने-संशोधित-लिखने में सक्षम है। एक ही ऑपरेशन में सेमाफोर को पढ़ें, संशोधित करें और लिखें। ऐसे हार्डवेयर निर्देश के अभाव में, पारस्परिक बहिष्करण सॉफ़्टवेयर समाधानों के उपयोग के माध्यम से एक परमाणु संचालन को संश्लेषित किया जा सकता है। [[यूनिप्रोसेसर]] सिस्टम पर, अस्थायी रूप से प्रीमेशन (कंप्यूटिंग) को निलंबित करके या हार्डवेयर [[ बाधा डालना ]] को अक्षम करके परमाणु संचालन सुनिश्चित किया जा सकता है। यह दृष्टिकोण मल्टीप्रोसेसर सिस्टम पर काम नहीं करता है जहां एक ही समय में अलग-अलग प्रोसेसर पर चलाने के लिए एक सेमाफोर साझा करने वाले दो प्रोग्राम संभव हैं। मल्टीप्रोसेसर सिस्टम में इस समस्या को हल करने के लिए सेमाफोर तक पहुंच को नियंत्रित करने के लिए लॉकिंग वैरिएबल का उपयोग किया जा सकता है। लॉकिंग वेरिएबल को [[टेस्ट-एंड-सेट]] | टेस्ट-एंड-सेट-लॉक कमांड का उपयोग करके हेरफेर किया जाता है। | ||
== उदाहरण == | == उदाहरण == | ||
=== तुच्छ उदाहरण === | === तुच्छ उदाहरण === | ||
एक वेरिएबल | एक वेरिएबल ए और एक बूलियन वेरिएबल एस पर विचार करें। ए को तभी एक्सेस किया जाता है जब एस को ट्रू मार्क किया जाता है। इस प्रकार, एस, ए के लिए एक सेमाफोर है। | ||
एक ट्रेन स्टेशन (ए) से ठीक पहले एक स्टॉपलाइट | एक ट्रेन स्टेशन (ए) से ठीक पहले एक स्टॉपलाइट संकेत (एस) की कल्पना कर सकता है। ऐसे में अगर संकेत हरा है, तो कोई ट्रेन स्टेशन में प्रवेश कर सकता है। यदि यह पीला या लाल (या कोई अन्य रंग) है, तो ट्रेन स्टेशन तक नहीं पहुँचा जा सकता है। | ||
=== लॉगिन | === लॉगिन पंक्ति === | ||
एक ऐसी प्रणाली पर विचार करें जो केवल दस उपयोगकर्ताओं ( | एक ऐसी प्रणाली पर विचार करें जो केवल दस उपयोगकर्ताओं (एस = 10) का समर्थन कर सकती है। जब भी कोई उपयोगकर्ता लॉग इन करता है, पी को कॉल किया जाता है, सेमाफोर एस को 1 से कम कर दिया जाता है। जब भी कोई उपयोगकर्ता लॉग आउट करता है, वी को कॉल किया जाता है, उपलब्ध हो चुके लॉगिन स्लॉट का प्रतिनिधित्व करते हुए एस को 1 से बढ़ा दिया जाता है। जब एस 0 होता है, तो लॉग इन करने के इच्छुक किसी भी उपयोगकर्ता को एस बढ़ने तक प्रतीक्षा करनी चाहिए; एक स्लॉट मुक्त होने तक लॉगिन अनुरोध एक फीफो पंक्ति पर लगाया जाता है। [[आपसी बहिष्कार]] का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि अनुरोधों को क्रम में रखा गया है। जब भी एस बढ़ता है (लॉगिन स्लॉट उपलब्ध है), एक लॉगिन अनुरोध को हटा दिया जाता है, और अनुरोध करने वाले उपयोगकर्ता को लॉग इन करने की अनुमति दी जाती है। यदि एस पहले से ही 0 से अधिक है, तो लॉगिन अनुरोध तुरंत हटा दिए जाते हैं। | ||
=== निर्माता-उपभोक्ता समस्या === | === निर्माता-उपभोक्ता समस्या === | ||
निर्माता-उपभोक्ता समस्या में, एक प्रक्रिया (निर्माता) डेटा आइटम उत्पन्न करती है और दूसरी प्रक्रिया (उपभोक्ता) उन्हें प्राप्त करती है और उनका उपयोग करती है। वे अधिकतम आकार | निर्माता-उपभोक्ता समस्या में, एक प्रक्रिया (निर्माता) डेटा आइटम उत्पन्न करती है और दूसरी प्रक्रिया (उपभोक्ता) उन्हें प्राप्त करती है और उनका उपयोग करती है। वे अधिकतम आकार एन की पंक्ति का उपयोग करके संचार करते हैं और निम्नलिखित उपबंध के अधीन हैं: | ||
* | * पंक्ति खाली होने पर उपभोक्ता को निर्माता के लिए कुछ उत्पादन करने की प्रतीक्षा करनी चाहिए; | ||
* | * पंक्ति पूरी होने पर निर्माता को उपभोक्ता द्वारा कुछ उपभोग करने की प्रतीक्षा करनी चाहिए। | ||
निर्माता-उपभोक्ता समस्या का सेमाफोर समाधान | निर्माता-उपभोक्ता समस्या का सेमाफोर समाधान पंक्ति की स्थिति को दो सेमाफोर के साथ ट्रैक करता है: <code>खाली गिनती</code>, पंक्ति में खाली स्थानों की संख्या, और <code>पूर्ण गणना</code>, पंक्ति में तत्वों की संख्या। अखंडता बनाए रखने के लिए, <code>खाली गिनती</code> पंक्ति में खाली स्थानों की वास्तविक संख्या से कम (लेकिन कभी अधिक नहीं) हो सकता है, और <code>पूर्ण गणना</code>पंक्ति में वस्तुओं की वास्तविक संख्या की तुलना में कम (लेकिन कभी अधिक नहीं) हो सकता है। खाली स्थान और आइटम दो प्रकार के संसाधनों का प्रतिनिधित्व करते हैं, खाली बॉक्स और पूर्ण बॉक्स, और सेमाफोर <code>खाली गिनती</code> और <code>पूर्ण गणना</code> इन संसाधनों पर नियंत्रण बनाए रखें। | ||
बाइनरी सेमाफोर <code> | बाइनरी सेमाफोर <code>उपयोग कतार</code> यह सुनिश्चित करता है कि पंक्ति की स्थिति की अखंडता से समझौता नहीं किया जाता है, उदाहरण के लिए दो उत्पादकों द्वारा एक साथ खाली पंक्ति में आइटम जोड़ने का प्रयास किया जाता है, जिससे इसकी आंतरिक स्थिति दूषित हो जाती है। वैकल्पिक रूप से बाइनरी सेमाफोर के स्थान पर एक [[ म्युटेक्स ]] का उपयोग किया जा सकता है। <code>खाली गिनती</code> ई> प्रारम्भ में एन है, <code>पूर्ण गणना</code> प्रारंभ में 0 है, और <code>उपयोग कतार</code> प्रारंभ में 1 है। | ||
निर्माता निम्नलिखित बार-बार करता है: | निर्माता निम्नलिखित बार-बार करता है: | ||
Line 84: | Line 85: | ||
उत्पाद: | उत्पाद: | ||
पी (खाली गिनती) | पी (खाली गिनती) | ||
पी (उपयोग | पी (उपयोग पंक्ति) | ||
आइटम को कतार में रखें(आइटम) | |||
वी (उपयोग | वी (उपयोग पंक्ति) | ||
वी (पूर्ण गणना) | वी (पूर्ण गणना) | ||
Line 93: | Line 94: | ||
उपभोग करना: | उपभोग करना: | ||
पी (पूर्ण गणना) | पी (पूर्ण गणना) | ||
पी (उपयोग | पी (उपयोग पंक्ति) | ||
आइटम ← | आइटम ← कतार से आइटम प्राप्त करें () | ||
वी (उपयोग | वी (उपयोग पंक्ति) | ||
वी (खाली गिनती) | वी (खाली गिनती) | ||
नीचे एक वास्तविक उदाहरण है: | नीचे एक वास्तविक उदाहरण है: | ||
# एक एकल उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश करता है। तब से <code> | # एक एकल उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश करता है। तब से <code>पूर्ण गणना</code> 0 है, उपभोक्ता ब्लॉक। | ||
# कई निर्माता निर्माता के महत्वपूर्ण खंड में प्रवेश करते हैं। एन उत्पादकों से अधिक कोई भी उनके महत्वपूर्ण खंड में प्रवेश नहीं कर सकता है <code> | # कई निर्माता निर्माता के महत्वपूर्ण खंड में प्रवेश करते हैं। एन उत्पादकों से अधिक कोई भी उनके महत्वपूर्ण खंड में प्रवेश नहीं कर सकता है <code>खाली गिनती</code> उनके प्रवेश पर रोक। | ||
# निर्माता, एक समय में, | # निर्माता, एक समय में, पंक्ति तक पहुंच प्राप्त करते हैं <code>uएसeQueue</code> और पंक्ति में आइटम जमा करें। | ||
# एक बार जब पहला निर्माता अपने महत्वपूर्ण खंड से बाहर निकल जाता है, <code> | # एक बार जब पहला निर्माता अपने महत्वपूर्ण खंड से बाहर निकल जाता है, <code>पूर्ण गणना</code> वृद्धि हुई है, जिससे एक उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश कर सकता है। | ||
ध्यान दें कि <code> | ध्यान दें कि <code>खाली गिनतीt</code> पंक्ति में खाली स्थानों की वास्तविक संख्या की तुलना में बहुत कम हो सकता है, उदाहरण के लिए जहां कई उत्पादकों ने इसे घटा दिया है लेकिन अपनी बारी का इंतजार कर रहे हैं <code>उपयोग पंक्ति</code> खाली जगह भरने से पहले ध्यान दें कि <code>खाली गिनती + पूर्ण गणनाt ≤ ''एन'' </code> हमेशा समानता के साथ रखता है अगर और केवल अगर कोई निर्माता या उपभोक्ता अपने महत्वपूर्ण वर्गों को निष्पादित नहीं कर रहे हैं। | ||
== ऑपरेशन के नाम == | == ऑपरेशन के नाम == | ||
विहित नाम वी और पी डच भाषा के शब्दों के पहले अक्षर से आते हैं। वी को | विहित नाम वी और पी डच भाषा के शब्दों के पहले अक्षर से आते हैं। वी को प्रायः वेरोजेन (वृद्धि) के रूप में समझाया जाता है। पी के लिए कई स्पष्टीकरण प्रस्तुत किए गए हैं, जिनमें प्रोब्रेन (परीक्षण या प्रयास करना) सम्मिलित है,<ref>{{harvnb|Silberschatz|Galvin|Gagne|2008|p=234}}</ref> पास (पास), और हड़पना (हड़पना)। इस विषय पर दिज्क्स्ट्रा का सबसे पहला पेपर<ref name="ReferenceA"/>पी के अर्थ के रूप में पासिंग (पासिंग) देता है, और वी के अर्थ के रूप में व्रजगवे (रिलीज) देता है। इसमें यह भी उल्लेख किया गया है कि शब्दावली रेलवे संकेत में उपयोग की जाने वाली शब्दावली से ली गई है। दिज्क्स्ट्रा ने बाद में लिखा कि उनका इरादा पी को प्रोलाग के लिए खड़ा करना था,<ref>{{Cite EWD|74}}</ref> प्रोबेरर ते वर्लगेन के लिए संक्षिप्त, शाब्दिक रूप से कम करने का प्रयास करें, या दूसरे मामले में उपयोग की जाने वाली शर्तों को समानांतर करने के लिए, कम करने का प्रयास करें।<ref>{{Cite EWD|51| MULTIPROGAMMERING EN DE X8}} (in [[Dutch language|Dutch]])</ref><ref name="try-and">Dijkstra's own translation reads "try-''and''-decrease", although that phrase might be confusing for those unaware of the [http://www.wsu.edu/~brians/errors/try.html colloquial "try-and..."]</ref><ref>[https://lkml.org/lkml/2005/12/19/34 (PATCH 1/19) MUTEX: Introduce simple mutex implementation] Linux Kernel Mailing List, 19 December 2005</ref> | ||
[[ALGOL 68]] में, [[लिनक्स कर्नेल]],<ref>[http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html#ss5.3 Linux Kernel hacking HOWTO] {{Webarchive|url=https://web.archive.org/web/20100528154351/http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html#ss5.3 |date=2010-05-28 }} LinuxGrill.com</ref> और कुछ अंग्रेजी पाठ्यपुस्तकों में, | |||
[[ALGOL 68|एलजीओएल 68]] में, [[लिनक्स कर्नेल]],<ref>[http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html#ss5.3 Linux Kernel hacking HOWTO] {{Webarchive|url=https://web.archive.org/web/20100528154351/http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html#ss5.3 |date=2010-05-28 }} LinuxGrill.com</ref> और कुछ अंग्रेजी पाठ्यपुस्तकों में, वी और पी संक्रियाओं को क्रमशः ऊपर और नीचे कहा जाता है। सॉफ्टवेयर इंजीनियरिंग अभ्यास में, उन्हें अक्सर संकेत और प्रतीक्षा कहा जाता है,<ref name="plan9">{{cite conference |last1=Mullender |first1=Sape |first2=Russ |last2=Cox |title=Semaphores in Plan 9 |conference=3rd International Workshop on [[Plan 9 from Bell Labs|Plan 9]] |year=2008 |url=http://doc.cat-v.org/plan_9/IWP9/2008/iwp9_proceedings08.pdf#page=62}}</ref> प्रचलित करना और प्राप्त करना{{r|plan9}} (जो कि मानक [[जावा (प्रोग्रामिंग भाषा)]] लाइब्रेरी है<ref>{{Javadoc:SE|package=java.util.concurrent|java/util/concurrent|Semaphore}}</ref> का उपयोग करता है), या पोस्ट और भुगतान किया। कुछ पाठ<ref>{{Cite web|url=http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node036A.html|title=exec.library/Procure|website=amigadev.elowar.com|access-date=2016-09-19}}</ref><ref>{{Cite web|url=http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node0389.html|title=exec.library/Vacate|website=amigadev.elowar.com|access-date=2016-09-19}}</ref> उन्हें खाली करने के लिए कहें और मूल डच इनिशियल्स से मिलान करने के लिए खरीद लें। | |||
== सेमाफोरस बनाम म्यूटेक्स == | == सेमाफोरस बनाम म्यूटेक्स == | ||
एक म्युटेक्स एक म्युचुअल एक्सक्लूज़न | एक म्युटेक्स एक म्युचुअल एक्सक्लूज़न टाइप ऑफ़ म्यूच्यूअल एक्सक्लूज़न उपकरण है जो कभी-कभी बाइनरी सेमाफोर के समान बुनियादी कार्यान्वयन का उपयोग करता है। उनके बीच का अंतर यह है कि उनका उपयोग कैसे किया जाता है। जबकि एक बाइनरी सेमाफोर को बोलचाल की भाषा में म्यूटेक्स के रूप में संदर्भित किया जा सकता है, एक सच्चे म्यूटेक्स में एक अधिक विशिष्ट उपयोग-मामला और परिभाषा होती है, जिसमें म्यूटेक्स को लॉक करने वाले [[टास्क (कंप्यूटिंग)]] को इसे अनलॉक करना होता है। इस बाधा का उद्देश्य सेमाफोर का उपयोग करने की कुछ संभावित समस्याओं से निपटना है: | ||
# प्राथमिकता व्युत्क्रम: यदि म्यूटेक्स को पता है कि किसने इसे लॉक किया है और इसे अनलॉक करना है, तो उस कार्य की प्राथमिकता को बढ़ावा देना संभव है जब भी कोई उच्च-प्राथमिकता वाला कार्य म्यूटेक्स पर प्रतीक्षा करना | # प्राथमिकता व्युत्क्रम: यदि म्यूटेक्स को पता है कि किसने इसे लॉक किया है और इसे अनलॉक करना है, तो उस कार्य की प्राथमिकता को बढ़ावा देना संभव है जब भी कोई उच्च-प्राथमिकता वाला कार्य म्यूटेक्स पर प्रतीक्षा करना प्रारम्भ करता है। | ||
# समय से पहले कार्य समाप्ति: म्यूटेक्स विलोपन सुरक्षा भी प्रदान कर सकता है, जहां म्यूटेक्स को रखने वाले कार्य को गलती से हटाया नहीं जा सकता है। {{citation needed|date=May 2019}} | # समय से पहले कार्य समाप्ति: म्यूटेक्स विलोपन सुरक्षा भी प्रदान कर सकता है, जहां म्यूटेक्स को रखने वाले कार्य को गलती से हटाया नहीं जा सकता है। {{citation needed|date=May 2019}} | ||
# समाप्ति गतिरोध: यदि किसी कारण से म्यूटेक्स-होल्डिंग कार्य समाप्त हो जाता है, तो [[रीयल-टाइम ऑपरेटिंग सिस्टम]] इस स्थिति के म्यूटेक्स और | # समाप्ति गतिरोध: यदि किसी कारण से म्यूटेक्स-होल्डिंग कार्य समाप्त हो जाता है, तो [[रीयल-टाइम ऑपरेटिंग सिस्टम]] इस स्थिति के म्यूटेक्स और संकेत प्रतीक्षा कार्यों को प्रचलित कर सकता है। | ||
# पुनरावर्तन गतिरोध: एक कार्य को एक पुनर्वित्त म्यूटेक्स को कई बार लॉक करने की अनुमति दी जाती है क्योंकि यह इसे समान संख्या में अनलॉक करता है। | # पुनरावर्तन गतिरोध: एक कार्य को एक पुनर्वित्त म्यूटेक्स को कई बार लॉक करने की अनुमति दी जाती है क्योंकि यह इसे समान संख्या में अनलॉक करता है। | ||
# एक्सीडेंटल रिलीज़: म्यूटेक्स के रिलीज़ होने पर एक त्रुटि उत्पन्न होती है यदि रिलीज़ करने वाला कार्य उसका स्वामी नहीं है। | # एक्सीडेंटल रिलीज़: म्यूटेक्स के रिलीज़ होने पर एक त्रुटि उत्पन्न होती है यदि रिलीज़ करने वाला कार्य उसका स्वामी नहीं है। | ||
Line 133: | Line 135: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
परिचय | |||
* हिल्सहाइमर, वोल्कर (2004)। [https://doc.qt.io/archives/qq/qq11-mutex.html रीड/राइट म्यूटेक्स लागू करना] (वेब पेज)। क्यूटी तिमाही, अंक 11 - क्यू3 2004 | * हिल्सहाइमर, वोल्कर (2004)। [https://doc.qt.io/archives/qq/qq11-mutex.html रीड/राइट म्यूटेक्स लागू करना] (वेब पेज)। क्यूटी तिमाही, अंक 11 - क्यू3 2004 | ||
* {{cite journal |url= https://see.stanford.edu/materials/icsppcs107/23-Concurrency-Examples.pdf |first1= | * {{cite journal |url= https://see.stanford.edu/materials/icsppcs107/23-Concurrency-Examples.pdf |first1= जूली |last1= ज़ेलेंस्की |first2= छेद |last2= भाषा |series= CS107 प्रोग्रामिंग प्रतिमान |volume= स्प्रिंग 2008 |issue= 23 |journal= थिसिस |title= थ्रेड और सेमाफोर उदाहरण|publisher= स्टैनफोर्ड इंजीनियरिंग एवरव्हेयर (एसईई) }} | ||
=== संदर्भ === | === संदर्भ === | ||
*{{Cite EWD|123| | *{{Cite EWD|123|अनुक्रमिक प्रक्रियाओं का सहयोग करना}} (एसeपीtember 1965) | ||
*{{citation |mode= | *{{citation |mode=सीएस 1 |url=http://www.opengroup.org/onlinepubs/009695399/basedefs/semaphore.h.html |section=सेमाफोर.एच - सेमाफोर (वास्तविक समय) |title=ओपन ग्रुप बेस स्पेसिफिकेशंस इश्यू 6 IEEE Std 1003.1, 2004 संस्करण |publisher=खुला समूह |date=2004}} | ||
*{{cite web |url= http://greenteapress.com/semaphores/ |title= | *{{cite web |url= http://greenteapress.com/semaphores/ |title= सेमाफोरस की छोटी किताब |first= एलन बी. |last= डाउनी |publisher= ग्रीन टी प्रेस |issue= 2.2.1 |edition= 2nd |date= 2016 |orig-year= 2005 }} | ||
*{{cite web |url= http://www.enseignement.polytechnique.fr/informatique/INF431/X09-2010-2011/AmphiTHC/SynchronizationPrimitives.pdf |title= | *{{cite web |url= http://www.enseignement.polytechnique.fr/informatique/INF431/X09-2010-2011/AmphiTHC/SynchronizationPrimitives.pdf |title= तुल्यकालन आदिमों की सार्वभौमिकता पर एक व्यावहारिक, ऐतिहासिक रूप से उन्मुख सर्वेक्षण |first= जौनी |last= लेप्पाजर्वी |date= May 11, 2008 |location= औलू विश्वविद्यालय, फिनलैंड }} | ||
{{Data types}} | {{Data types}} |
Revision as of 11:48, 1 June 2023
कंप्यूटर विज्ञान में, एक सेमाफोर एक चर (प्रोग्रामिंग) या सार डेटा प्रकार है जिसका उपयोग कई प्रक्रियाओं (कंप्यूटिंग) द्वारा एक सामान्य संसाधन तक पहुंच को नियंत्रित करने के लिए किया जाता है और एक कंप्यूटर मल्टीटास्किंग ऑपरेटिंग सिस्टम जैसे समवर्ती संगणक वैज्ञानिक में महत्वपूर्ण खंड समस्याओं से बचा जाता है। सेमाफोर एक प्रकार का तुल्यकालन (कंप्यूटर विज्ञान) है। एक तुच्छ सेमाफोर एक सादा चर है जिसे प्रोग्रामर-परिभाषित स्थितियों के आधार पर बदला जाता है (उदाहरण के लिए, वृद्धि या कमी, या टॉगल)।
एक सेमाफोर के बारे में सोचने का एक उपयोगी तरीका, जैसा कि एक वास्तविक दुनिया प्रणाली में उपयोग किया जाता है, एक रिकॉर्ड के रूप में है कि किसी विशेष संसाधन की कितनी इकाइयाँ उपलब्ध हैं, उस रिकॉर्ड को 'सुरक्षित रूप से' समायोजित करने के लिए संचालन के साथ मिलकर (यानी, दौड़ की स्थिति से बचने के लिए) ) इकाइयों के अधिग्रहण या मुक्त होने के रूप में, और, यदि आवश्यक हो, तब तक प्रतीक्षा करें जब तक कि संसाधन की एक इकाई उपलब्ध न हो जाए।
दौड़ स्थितियों की रोकथाम में सेमाफोर एक उपयोगी उपकरण है; हालाँकि, उनका उपयोग इस बात की गारंटी नहीं है कि कोई प्रोग्राम इन समस्याओं से मुक्त है। सेमाफोर जो मनमाने ढंग से संसाधनों की गणना की अनुमति देते हैं उन्हें काउंटिंग सेमाफोर कहा जाता है, जबकि सेमाफोर जो मान 0 और 1 (या लॉक/अनलॉक, अनुपलब्ध/उपलब्ध) तक सीमित हैं उन्हें बाइनरी सेमाफोर कहा जाता है और लॉक (कंप्यूटर विज्ञान) को लागू करने के लिए उपयोग किया जाता है।
सेमाफोर अवधारणा का आविष्कार 1962 या 1963 में डच लोगों के कंप्यूटर वैज्ञानिक एडवर्ड डिजस्ट्रा द्वारा किया गया था,[2] जब डिज्कस्ट्रा और उनकी टीम इलेक्ट्रोलॉजिका X8 के लिए एक ऑपरेटिंग सिस्टम विकसित कर रहे थे। उस प्रणाली को अंततः मल्टीप्रोग्रामिंग सिस्टम के रूप में जाना जाने लगा।
पुस्तकालय सादृश्य
मान लीजिए कि एक भौतिक पुस्तकालय में एक समय में एक छात्र द्वारा उपयोग किए जाने वाले 10 समान अध्ययन कक्ष हैं। यदि छात्र अध्ययन कक्ष का उपयोग करना चाहते हैं तो उन्हें फ्रंट डेस्क से एक कमरे का अनुरोध करना होगा। यदि कोई कमरा खाली नहीं है, तो छात्र डेस्क पर तब तक प्रतीक्षा करते हैं जब तक कि कोई कमरा खाली नहीं कर देता। जब एक छात्र एक कमरे का उपयोग करना समाप्त कर लेता है, तो छात्र को डेस्क पर लौटना चाहिए और यह इंगित करना चाहिए कि एक कमरा खाली हो गया है।
सबसे सरल कार्यान्वयन में, रिसेप्शनिस्ट के क्लर्क को केवल उपलब्ध मुफ्त कमरों की संख्या के बारे में पता होता है, जिसे वे केवल तभी सही ढंग से जानते हैं जब सभी छात्र वास्तव में अपने कमरे का उपयोग करते हैं जब उन्होंने उनके लिए साइन अप किया होता है और जब वे काम पूरा कर लेते हैं तो उन्हें वापस कर देते हैं। जब कोई छात्र कमरे का अनुरोध करता है, तो क्लर्क इस संख्या को कम कर देता है। जब कोई छात्र कमरा खाली करता है, तो क्लर्क इस संख्या को बढ़ा देता है। कमरे का उपयोग जब तक चाहें तब तक किया जा सकता है, और इसलिए समय से पहले कमरे बुक करना संभव नहीं है।
इस परिदृश्य में फ्रंट डेस्क काउंट-होल्डर एक काउंटिंग सेमाफोर का प्रतिनिधित्व करता है, कमरे संसाधन हैं, और छात्र प्रक्रियाओं/धागों का प्रतिनिधित्व करते हैं। इस परिदृश्य में सेमाफोर का मान प्रारंभ में 10 है, जिसमें सभी कमरे खाली हैं। जब एक छात्र एक कमरे का अनुरोध करता है, तो उन्हें पहुंच प्रदान की जाती है, और सेमाफोर का मान 9 में बदल जाता है। अगले छात्र के आने के बाद, यह 8 तक गिर जाता है, फिर 7 और इसी तरह। यदि कोई कमरे का अनुरोध करता है और सेमाफोर का वर्तमान मान 0 है,[3] उन्हें तब तक इंतजार करने के लिए मजबूर किया जाता है जब तक कि एक कमरा खाली नहीं हो जाता (जब गिनती 0 से बढ़ जाती है)। यदि एक कमरा छोड़ दिया गया था, लेकिन कई छात्र प्रतीक्षा कर रहे हैं, तो किसी एक का चयन करने के लिए किसी भी विधि का उपयोग किया जा सकता है जो कमरे पर कब्जा करेगा (जैसे फीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स) या बेतरतीब ढंग से एक को चुनना)। और निश्चित रूप से, एक छात्र को अपने कमरे को वास्तव में छोड़ने के बाद ही क्लर्क को सूचित करने की आवश्यकता होती है, अन्यथा, एक अजीब स्थिति हो सकती है जब ऐसे छात्र कमरे छोड़ने की प्रक्रिया में हों (वे अपनी पाठ्यपुस्तकें बाँध रहे हों, आदि)। और उनके जाने से पहले एक अन्य छात्र कमरे में प्रवेश करता है।
महत्वपूर्ण अवलोकन
जब संसाधनों के एक पूल (कंप्यूटर विज्ञान) तक पहुंच को नियंत्रित करने के लिए उपयोग किया जाता है, तो एक सेमाफोर केवल यह ट्रैक करता है कि कितने संसाधन मुक्त हैं; यह ट्रैक नहीं करता है कि कौन से संसाधन निःशुल्क हैं। एक विशेष मुक्त संसाधन का चयन करने के लिए कुछ अन्य तंत्र (संभवतः अधिक सेमाफोर सम्मिलित ) की आवश्यकता हो सकती है।
प्रतिमान विशेष रूप से शक्तिशाली है क्योंकि सेमाफोर गिनती कई अलग-अलग क्रियाओं के लिए एक उपयोगी ट्रिगर के रूप में काम कर सकती है। उपरोक्त पुस्तकालय अध्यक्ष अध्ययन हॉल में रोशनी बंद कर सकता है जब कोई छात्र शेष नहीं होता है, या यह संकेत दे सकता है कि कमरे बहुत व्यस्त हैं जब अधिकांश कमरे भरे हुए हैं।
प्रोटोकॉल की सफलता के लिए अनुप्रयोगों को इसका सही ढंग से पालन करने की आवश्यकता होती है। निष्पक्षता और सुरक्षा से समझौता किए जाने की संभावना है (जिसका व्यावहारिक अर्थ है कि एक प्रोग्राम धीरे-धीरे व्यवहार कर सकता है, अनियमित रूप से कार्य कर सकता है, रुक सकता है (कंप्यूटिंग) या क्रैश (कंप्यूटिंग)) यदि एक भी प्रक्रिया गलत तरीके से कार्य करती है। यह भी सम्मिलित है:
- किसी संसाधन का अनुरोध करना और उसे प्रचलित करना भूल जाना;
- ऐसे संसाधन को प्रचलित करना जिसका कभी अनुरोध नहीं किया गया था;
- किसी संसाधन को लंबे समय तक बिना आवश्यकता के रखना;
- पहले अनुरोध किए बिना (या इसे प्रचलित करने के बाद) संसाधन का उपयोग करना।
यहां तक कि अगर सभी प्रक्रियाएं इन नियमों का पालन करती हैं, तब भी बहु-संसाधन गतिरोध तब भी हो सकता है जब अलग-अलग संसाधनों को अलग-अलग सेमाफोर द्वारा प्रबंधित किया जाता है और जब प्रक्रियाओं को एक समय में एक से अधिक संसाधनों का उपयोग करने की आवश्यकता होती है, जैसा कि डाइनिंग फिलोसोफर्स की समस्या से स्पष्ट होता है।
शब्दार्थ और कार्यान्वयन
काउंटिंग सेमाफोर दो संक्रियाओं से सुसज्जित हैं, जिन्हें ऐतिहासिक रूप से पी और वी के रूप में दर्शाया गया है (देखें § ऑपरेशन के नाम वैकल्पिक नामों के लिए)। ऑपरेशन वी सेमाफोर एस को बढ़ाता है, और ऑपरेशन पी इसे घटाता है।
सेमाफोर एस का मान वर्तमान में उपलब्ध संसाधनों की इकाइयों की संख्या है। पी ऑपरेशन वेटिंग या नींद (सिस्टम कॉल) में व्यस्त है जब तक कि सेमाफोर द्वारा संरक्षित संसाधन उपलब्ध नहीं हो जाता है, जिस समय संसाधन का तुरंत दावा किया जाता है। वी ऑपरेशन उलटा है: यह एक संसाधन को फिर से उपलब्ध कराता है जब प्रक्रिया का उपयोग समाप्त हो जाता है।
सेमाफोर एस की एक महत्वपूर्ण संपत्ति यह है कि इसके मूल्य को वी और पी संचालनों का उपयोग करने के अलावा बदला नहीं जा सकता है।
समझने का एक सरल तरीका प्रतीक्षा (पी) और संकेत (वी) संचालन है:
- प्रतीक्षा: सेमाफोर चर के मान को 1 से घटाता है। यदि सेमाफोर चर का नया मान ऋणात्मक है, तो प्रक्रिया निष्पादित होती है प्रतीक्षा अवरुद्ध है (यानी, सेमाफोर की पंक्ति में जोड़ा गया)। अन्यथा, संसाधन की एक इकाई का उपयोग करके प्रक्रिया निष्पादन प्रचलित रखती है।
- संकेत: सेमाफोर चर के मान को 1 से बढ़ाता है। वृद्धि के बाद, यदि पूर्व-वृद्धि मान ऋणात्मक था (मतलब संसाधन के लिए प्रतीक्षारत प्रक्रियाएं हैं), तो यह एक अवरुद्ध प्रक्रिया को सेमाफोर की प्रतीक्षा पंक्ति से तैयार पंक्ति में स्थानांतरित करता है।
कई ऑपरेटिंग सिस्टम कुशल सेमाफोर प्रिमिटिव प्रदान करते हैं जो सेमाफोर के बढ़ने पर प्रतीक्षा प्रक्रिया को अनब्लॉक करते हैं। इसका मतलब यह है कि प्रक्रिया अनावश्यक रूप से सेमाफोर मूल्य की जाँच करने में समय बर्बाद नहीं करती है।
काउंटिंग सेमाफोर अवधारणा को यूनिक्स में कार्यान्वित एक यांत्रिकी सेमाफोर से एक से अधिक यूनिट का दावा करने या वापस करने की क्षमता के साथ बढ़ाया जा सकता है। संशोधित वी और पी संचालन निम्नानुसार हैं, परमाणु संचालन को इंगित करने के लिए स्क्वायर ब्रैकेट का उपयोग करना, यानी, संचालन जो अन्य प्रक्रियाओं के परिप्रेक्ष्य से अविभाज्य दिखाई देते हैं:
फ़ंक्शन वी (सेमाफोर एस, पूर्णांक आई): [एस ← एस + आई] समारोह पी (सेमाफोर एस, पूर्णांक आई): दोहराना: [अगर एस ≥ आई: एस ← एस - आई तोड़ना]
हालांकि, इस खंड का शेष भाग यूनरी वी और पी संचालन के साथ सेमाफोर को संदर्भित करता है, जब तक कि अन्यथा निर्दिष्ट न हो।
संसाधन भुखमरी से बचने के लिए, एक सेमाफोर में प्रक्रियाओं की एक संबद्ध पंक्ति (डेटा संरचना) होती है (प्रायः एफआईएफओ (कंप्यूटिंग और इलेक्ट्रॉनिक्स) सिमेंटिक्स के साथ)। यदि कोई प्रक्रिया किसी सेमाफोर पर पी ऑपरेशन करती है जिसका मान शून्य है, तो प्रक्रिया को सेमाफोर की पंक्ति में जोड़ दिया जाता है और इसका निष्पादन निलंबित कर दिया जाता है। जब कोई अन्य प्रक्रिया वी ऑपरेशन करके सेमाफोर को बढ़ाती है, और पंक्ति में प्रक्रियाएँ होती हैं, तो उनमें से एक को पंक्ति से हटा दिया जाता है और निष्पादन फिर से प्रारम्भ हो जाता है। जब प्रक्रियाओं की अलग-अलग प्राथमिकताएँ होती हैं, तो पंक्ति को प्राथमिकता के आधार पर क्रमबद्ध किया जा सकता है, ताकि सर्वोच्च प्राथमिकता वाली प्रक्रिया पंक्ति से पहले ली जाए।
यदि कार्यान्वयन वेतन वृद्धि, कमी और तुलना संचालन की परमाणुता सुनिश्चित नहीं करता है, तो वेतन वृद्धि या कमी को भूल जाने या सेमाफोर मूल्य के नकारात्मक होने का जोखिम होता है। एक मशीन निर्देश का उपयोग करके परमाणुता प्राप्त की जा सकती है जो पढ़ने-संशोधित-लिखने में सक्षम है। एक ही ऑपरेशन में सेमाफोर को पढ़ें, संशोधित करें और लिखें। ऐसे हार्डवेयर निर्देश के अभाव में, पारस्परिक बहिष्करण सॉफ़्टवेयर समाधानों के उपयोग के माध्यम से एक परमाणु संचालन को संश्लेषित किया जा सकता है। यूनिप्रोसेसर सिस्टम पर, अस्थायी रूप से प्रीमेशन (कंप्यूटिंग) को निलंबित करके या हार्डवेयर बाधा डालना को अक्षम करके परमाणु संचालन सुनिश्चित किया जा सकता है। यह दृष्टिकोण मल्टीप्रोसेसर सिस्टम पर काम नहीं करता है जहां एक ही समय में अलग-अलग प्रोसेसर पर चलाने के लिए एक सेमाफोर साझा करने वाले दो प्रोग्राम संभव हैं। मल्टीप्रोसेसर सिस्टम में इस समस्या को हल करने के लिए सेमाफोर तक पहुंच को नियंत्रित करने के लिए लॉकिंग वैरिएबल का उपयोग किया जा सकता है। लॉकिंग वेरिएबल को टेस्ट-एंड-सेट | टेस्ट-एंड-सेट-लॉक कमांड का उपयोग करके हेरफेर किया जाता है।
उदाहरण
तुच्छ उदाहरण
एक वेरिएबल ए और एक बूलियन वेरिएबल एस पर विचार करें। ए को तभी एक्सेस किया जाता है जब एस को ट्रू मार्क किया जाता है। इस प्रकार, एस, ए के लिए एक सेमाफोर है।
एक ट्रेन स्टेशन (ए) से ठीक पहले एक स्टॉपलाइट संकेत (एस) की कल्पना कर सकता है। ऐसे में अगर संकेत हरा है, तो कोई ट्रेन स्टेशन में प्रवेश कर सकता है। यदि यह पीला या लाल (या कोई अन्य रंग) है, तो ट्रेन स्टेशन तक नहीं पहुँचा जा सकता है।
लॉगिन पंक्ति
एक ऐसी प्रणाली पर विचार करें जो केवल दस उपयोगकर्ताओं (एस = 10) का समर्थन कर सकती है। जब भी कोई उपयोगकर्ता लॉग इन करता है, पी को कॉल किया जाता है, सेमाफोर एस को 1 से कम कर दिया जाता है। जब भी कोई उपयोगकर्ता लॉग आउट करता है, वी को कॉल किया जाता है, उपलब्ध हो चुके लॉगिन स्लॉट का प्रतिनिधित्व करते हुए एस को 1 से बढ़ा दिया जाता है। जब एस 0 होता है, तो लॉग इन करने के इच्छुक किसी भी उपयोगकर्ता को एस बढ़ने तक प्रतीक्षा करनी चाहिए; एक स्लॉट मुक्त होने तक लॉगिन अनुरोध एक फीफो पंक्ति पर लगाया जाता है। आपसी बहिष्कार का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि अनुरोधों को क्रम में रखा गया है। जब भी एस बढ़ता है (लॉगिन स्लॉट उपलब्ध है), एक लॉगिन अनुरोध को हटा दिया जाता है, और अनुरोध करने वाले उपयोगकर्ता को लॉग इन करने की अनुमति दी जाती है। यदि एस पहले से ही 0 से अधिक है, तो लॉगिन अनुरोध तुरंत हटा दिए जाते हैं।
निर्माता-उपभोक्ता समस्या
निर्माता-उपभोक्ता समस्या में, एक प्रक्रिया (निर्माता) डेटा आइटम उत्पन्न करती है और दूसरी प्रक्रिया (उपभोक्ता) उन्हें प्राप्त करती है और उनका उपयोग करती है। वे अधिकतम आकार एन की पंक्ति का उपयोग करके संचार करते हैं और निम्नलिखित उपबंध के अधीन हैं:
- पंक्ति खाली होने पर उपभोक्ता को निर्माता के लिए कुछ उत्पादन करने की प्रतीक्षा करनी चाहिए;
- पंक्ति पूरी होने पर निर्माता को उपभोक्ता द्वारा कुछ उपभोग करने की प्रतीक्षा करनी चाहिए।
निर्माता-उपभोक्ता समस्या का सेमाफोर समाधान पंक्ति की स्थिति को दो सेमाफोर के साथ ट्रैक करता है: खाली गिनती
, पंक्ति में खाली स्थानों की संख्या, और पूर्ण गणना
, पंक्ति में तत्वों की संख्या। अखंडता बनाए रखने के लिए, खाली गिनती
पंक्ति में खाली स्थानों की वास्तविक संख्या से कम (लेकिन कभी अधिक नहीं) हो सकता है, और पूर्ण गणना
पंक्ति में वस्तुओं की वास्तविक संख्या की तुलना में कम (लेकिन कभी अधिक नहीं) हो सकता है। खाली स्थान और आइटम दो प्रकार के संसाधनों का प्रतिनिधित्व करते हैं, खाली बॉक्स और पूर्ण बॉक्स, और सेमाफोर खाली गिनती
और पूर्ण गणना
इन संसाधनों पर नियंत्रण बनाए रखें।
बाइनरी सेमाफोर उपयोग कतार
यह सुनिश्चित करता है कि पंक्ति की स्थिति की अखंडता से समझौता नहीं किया जाता है, उदाहरण के लिए दो उत्पादकों द्वारा एक साथ खाली पंक्ति में आइटम जोड़ने का प्रयास किया जाता है, जिससे इसकी आंतरिक स्थिति दूषित हो जाती है। वैकल्पिक रूप से बाइनरी सेमाफोर के स्थान पर एक म्युटेक्स का उपयोग किया जा सकता है। खाली गिनती
ई> प्रारम्भ में एन है, पूर्ण गणना
प्रारंभ में 0 है, और उपयोग कतार
प्रारंभ में 1 है।
निर्माता निम्नलिखित बार-बार करता है:
उत्पाद: पी (खाली गिनती) पी (उपयोग पंक्ति) आइटम को कतार में रखें(आइटम) वी (उपयोग पंक्ति) वी (पूर्ण गणना)
उपभोक्ता निम्नलिखित बार-बार करता है
उपभोग करना: पी (पूर्ण गणना) पी (उपयोग पंक्ति) आइटम ← कतार से आइटम प्राप्त करें () वी (उपयोग पंक्ति) वी (खाली गिनती)
नीचे एक वास्तविक उदाहरण है:
- एक एकल उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश करता है। तब से
पूर्ण गणना
0 है, उपभोक्ता ब्लॉक। - कई निर्माता निर्माता के महत्वपूर्ण खंड में प्रवेश करते हैं। एन उत्पादकों से अधिक कोई भी उनके महत्वपूर्ण खंड में प्रवेश नहीं कर सकता है
खाली गिनती
उनके प्रवेश पर रोक। - निर्माता, एक समय में, पंक्ति तक पहुंच प्राप्त करते हैं
uएसeQueue
और पंक्ति में आइटम जमा करें। - एक बार जब पहला निर्माता अपने महत्वपूर्ण खंड से बाहर निकल जाता है,
पूर्ण गणना
वृद्धि हुई है, जिससे एक उपभोक्ता अपने महत्वपूर्ण खंड में प्रवेश कर सकता है।
ध्यान दें कि खाली गिनतीt
पंक्ति में खाली स्थानों की वास्तविक संख्या की तुलना में बहुत कम हो सकता है, उदाहरण के लिए जहां कई उत्पादकों ने इसे घटा दिया है लेकिन अपनी बारी का इंतजार कर रहे हैं उपयोग पंक्ति
खाली जगह भरने से पहले ध्यान दें कि खाली गिनती + पूर्ण गणनाt ≤ एन
हमेशा समानता के साथ रखता है अगर और केवल अगर कोई निर्माता या उपभोक्ता अपने महत्वपूर्ण वर्गों को निष्पादित नहीं कर रहे हैं।
ऑपरेशन के नाम
विहित नाम वी और पी डच भाषा के शब्दों के पहले अक्षर से आते हैं। वी को प्रायः वेरोजेन (वृद्धि) के रूप में समझाया जाता है। पी के लिए कई स्पष्टीकरण प्रस्तुत किए गए हैं, जिनमें प्रोब्रेन (परीक्षण या प्रयास करना) सम्मिलित है,[4] पास (पास), और हड़पना (हड़पना)। इस विषय पर दिज्क्स्ट्रा का सबसे पहला पेपर[2]पी के अर्थ के रूप में पासिंग (पासिंग) देता है, और वी के अर्थ के रूप में व्रजगवे (रिलीज) देता है। इसमें यह भी उल्लेख किया गया है कि शब्दावली रेलवे संकेत में उपयोग की जाने वाली शब्दावली से ली गई है। दिज्क्स्ट्रा ने बाद में लिखा कि उनका इरादा पी को प्रोलाग के लिए खड़ा करना था,[5] प्रोबेरर ते वर्लगेन के लिए संक्षिप्त, शाब्दिक रूप से कम करने का प्रयास करें, या दूसरे मामले में उपयोग की जाने वाली शर्तों को समानांतर करने के लिए, कम करने का प्रयास करें।[6][7][8]
एलजीओएल 68 में, लिनक्स कर्नेल,[9] और कुछ अंग्रेजी पाठ्यपुस्तकों में, वी और पी संक्रियाओं को क्रमशः ऊपर और नीचे कहा जाता है। सॉफ्टवेयर इंजीनियरिंग अभ्यास में, उन्हें अक्सर संकेत और प्रतीक्षा कहा जाता है,[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
- ज़ेलेंस्की, जूली; भाषा, छेद. "थ्रेड और सेमाफोर उदाहरण" (PDF). थिसिस. CS107 प्रोग्रामिंग प्रतिमान. स्टैनफोर्ड इंजीनियरिंग एवरव्हेयर (एसईई). स्प्रिंग 2008 (23).
संदर्भ
- Dijkstra, Edsger W. अनुक्रमिक प्रक्रियाओं का सहयोग करना (EWD-123) (PDF). E.W. Dijkstra Archive. Center for American History, University of Texas at Austin. (transcription) (एसeपीtember 1965)
- "सेमाफोर.एच - सेमाफोर (वास्तविक समय)", ओपन ग्रुप बेस स्पेसिफिकेशंस इश्यू 6 IEEE Std 1003.1, 2004 संस्करण, खुला समूह, 2004
{{citation}}
: Invalid|mode=सीएस 1
(help) - डाउनी, एलन बी. (2016) [2005]. "सेमाफोरस की छोटी किताब" (2nd ed.). ग्रीन टी प्रेस.
- लेप्पाजर्वी, जौनी (May 11, 2008). "तुल्यकालन आदिमों की सार्वभौमिकता पर एक व्यावहारिक, ऐतिहासिक रूप से उन्मुख सर्वेक्षण" (PDF). औलू विश्वविद्यालय, फिनलैंड.