माना कि 'संसाधन' सार्वजनिक प्रसाधन-गृह के शौचालय हैं तथा शौचालयों का अभिगमन चाहने वाली 'प्रक्रियाएं' या तो वे लोग हैं, जो एक कतार में खड़े होकर किसी भी शौचालय के उपलब्ध होने की प्रतीक्षा कर रहे हैं, अथवा वे लोग हैं, जो पहले से ही शौचालय का प्रयोग कर रहे हैं।
शौचालय के बाहर बैठा व्यक्ति इस बात का ध्यान रखता है कि इस समय कितने शौचालय उपलब्ध हैं और इसके बाद किसे भीतर जाना चाहिए.

रिक्त शौचालयों की संख्या सेमाफोर का मान है, जो उपलब्ध रिक्त संसाधनों (शौचालयों) की संख्या बताता है। जब कोई प्रक्रिया (व्यक्ति) शौचालय का अभिगमन करना चाहता है, तो सेमाफोर (प्रभारी) उसे यह बताएगा कि उसे कतार में प्रतीक्षा करनी होगी या वह शौचालय का प्रयोग कर सकता है। यदि शौचालय रिक्त है तो उस व्यक्ति (प्रक्रिया) को अभिगम प्राप्त होता है और रिक्त शौचालयों की संख्या में से 1 कम कर दिया जाता है (P अथवा डाउन कार्य).इसका अर्थ यह हुआ कि रिक्त शौचालयों की संख्या 1 कम हो गई है। यदि रिक्त शौचालयों की संख्या 0 है, तो व्यक्ति (प्रक्रिया) को तब तक कतार में प्रतीक्षा करनी होगी, जब तक कि यह रिक्त न हो जाए (अर्थात प्रक्रिया को s>0 तक सोना पड़ेगा).एक बार जब व्यक्ति शौचालय का प्रयोग कर लेता है (प्रक्रिया किसी संसाधन के साथ कार्य पूरा कर लेती है), तो अगला व्यक्ति उसका प्रयोग कर सकता है। इसका अर्थ यह है कि रिक्त शौचालयों की संख्या में अब 1 की वृद्धि हो गई है (यह V अथवा अप कार्य को कॉल करने के ही सामान है).अब s का मान 0 से बड़ा हो गया है तथा प्रतीक्षा कर रहा व्यक्ति (सो रही प्रक्रिया) अब शौचालय (संसाधन) का अभिगमन कर सकता है।

उपलब्ध शौचालयों की मांग करने (इस बात की जांच कि क्या संसाधन रिक्त है), रिक्त शौचालयों (संसाधनों) की संख्या को अद्यतन करने तथा कतार में प्रतीक्षा करने की प्रक्रिया को किसी भी अन्य प्रक्रिया द्वारा बाधित नहीं किया जाना चाहिए.इसे एटॉमिक कार्य कहा जाता है।

यह कतार एक फर्स्ट-इन फर्स्ट-आउट क्यू है, जिसका अर्थ यह है कि कतार में सबसे पहले खड़े व्यक्ति को रिक्त शौचालय के प्रयोग का अवसर सबसे पहले मिलेगा.हालांकि यदि कतार में किसी अन्य स्थान पर खड़ा व्यक्ति शौचालय का प्रयोग तत्काल करना चाहता है (यदि किसी प्रक्रिया की प्राथमिकता अधिक है), तो कतार को व्यवस्थित किया जा सकता है।

सेमाफोर से एक से अधिक 'इकाई' की मांग करने या इसे लौटाने की क्षमता के द्वारा काउंटिंग सेमाफोर की अवधारणा का विस्तार किया जा सकता है। वस्तुत: UNIX सेमाफोर इसी प्रकार कार्य करता है। संशोधित P तथा V कार्य इस प्रकार संचालित होते हैं:

P(Semaphore s, integer howmany)
wait until s >= howmany;
s:=s - howmany; /*must be atomic operation*/
V(Semaphore s, integer howmany)
s:=s + howmany; /*must be atomic*/

इस बात को समझने के लिए कि यह P के सरल संस्करण को 'howmany' बार कॉल करने से बेहतर क्यों है, निम्न समस्या पर विचार करें.हम यह मान लेते हैं कि आपके पास N संसाधनों का एक संग्रह (Pool) है, जिसे हम निश्चित आकार वाला बफर (Fixed size buffer) कहेंगे.संभवत: आप उपलब्ध बफ़र्स का हिसाब रखने के लिए एक काउंटिंग सेमाफोर का प्रयोग करना चाहेंगे, जिसे N द्वारा इनीशलाइज़ किया गया हो.जब कोई प्रक्रिया एक बफर आवंटित करना चाहती है, तो वह सेमाफोर पर P को कॉल करती है और एक बफर प्राप्त करती है। यदि कोई बफर उपलब्ध न हों, तो एक प्रक्रिया तब तक प्रतीक्षा करती है, जब तक कोई अन्य प्रक्रिया किसी बफर को मुक्त नहीं कर देती और सेमाफोर पर V को कॉल नहीं कर लेती.

यह मानें कि दो प्रक्रियाएं हैं, जो क्रमश: बफ़र्स K<N तथा L<N को इस प्रकार प्राप्त करना चाहती हैं कि K+L>N हो. इसका सरल क्रियान्वयन यह होगा कि पहली प्रक्रिया P के सरल घटाव रूपांतरण (Simple Decrementing Variant) को सेमाफोर पर K बार कॉल करेगी और यह दूसरी प्रक्रिया द्वारा P के सरल घटाव रूपांतरण को सेमाफोर पर L बार कॉल कराएगी.हालांकि, इस पद्धति के फलस्वरूप गतिरोध (Deadlock) उत्पन्न हो सकता है: कल्पना करें कि ऑपरेटिंग सिस्टम पहली प्रक्रिया को क्रियान्वित होने की अनुमति देता है। तब, जब कि पहली प्रक्रिया ने केवल Z बफ़र्स का ही नियंत्रण प्राप्त किया हो (इस प्रकार कि Z<K तथा Z+L>N), तो दूसरी प्रक्रिया को क्रियान्वयन का समय देने के लिए ऑपरेटिंग सिस्टम पहली प्रक्रिया को रोक देता है। दूसरी प्रक्रिया बफ़र्स को प्राप्त करना शुरू करती है। हालांकि, जब दूसरी प्रक्रिया (N-Z) बफ़र्स प्राप्त करती है, तो सेमाफोर 0 हो जाता है और दूसरी प्रक्रिया किसी अन्य प्रक्रिया द्वारा कुछ और बफ़र्स मुक्त किये जाने तक निलंबित हो जाती है (क्योंकि L>N-Z है).अंतत: ऑपरेटिंग सिस्टम पहली प्रक्रिया को शेष (K-Z) बफ़र्स, जिनकी इसे आवश्यकता है, की खोज आगे बढ़ाने के लिए पुन: शुरू होने की अनुमति देता है। दुर्भाग्य से, चूंकि सेमाफोर 0 है, अतः पहली प्रक्रिया इस कार्य को पूर्ण नहीं कर सकती, अत: यह भी किसी अन्य प्रक्रिया द्वारा और अधिक बफ़र्स मुक्त किये जाने की प्रतीक्षा करते हुए निलंबित हो जाती है। न तो पहली और न ही दूसरी प्रक्रिया कार्य को जारी रखने के लिए पर्याप्त बफ़र्स प्राप्त कर सकती हैं और इसलिए दोनों में से कोई भी प्रक्रिया संग्रह (Pool) को कोई बफर नहीं लौटाती.इस प्रकार, वे एक गतिरोध (Deadlock) की स्थिति में फंस जाती हैं।

सेमाफोर के संशोधित संस्करण में, पहली प्रक्रिया K बफ़र्स (या अधिक शुद्ध रूप से, सेमाफोर इकाइयों) की मांग करेगी, जो उसे एक एटॉमिक कार्य के द्वारा प्राप्त होंगी, जिसके बाद सेमाफोर में N-K इकाइयां शेष रह जाएंगी.तब दूसरी प्रक्रिया आएगी, जो सेमाफोर को N-K-L तक घटाएगी और चूंकि यह एक ऋणात्मक संख्या है, अत: प्रतीक्षा करेगी.जब पहली प्रक्रिया बफ़र्स को मुक्त करती है और सेमाफोर को बढ़ाती है, तब जैसे ही सेमाफोर 0 पर पहुंचता है, तो इसका अर्थ यह है कि संग्रह में L तत्व उपलब्ध हैं, दूसरी प्रक्रिया प्रारम्भ हो सकती है और इसके सभी बफ़र्स प्राप्त कर सकती है।

इस बात पर ध्यान दिया जाना चाहिए कि सेमाफोर की गणना (Semaphore Count) संग्रह में उपलब्ध बफ़र्स की संख्या के बराबर होना आवश्यक नहीं है।P में दो बार S>=0 शर्त को जांचना और इसके लिए प्रतीक्षा करना इस बात की गारंटी देने के लिए आवश्यक है कि सेमाफोर की प्रतीक्षा सूची में जुड़ती जाने वाली विभिन्न प्रक्रियाएं एक दूसरे के निवेदनों में बाधा उत्पन्न न करतीं: एक प्रक्रिया तब तक सेमाफोर की गणना को नहीं बदलती, जब तक कि वह क्यू में अगली प्रक्रिया न हो.वास्तविक कार्यान्वयन में यह कार्य मध्यवर्ती चरण के लिए प्रतीक्षा प्रक्रिया को यथार्थ में सक्रिय किये बिना किया जाता है।

परिचय
प्रयोग के उदाहरण
हार्डवेयर समर्थन
अनुरूपता