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

P(Semaphore s) //Acquire Resource
wait until s > 0, then s := s-1;
/* Testing and decrementing s must be atomic to avoid race conditions* /
V(Semaphore s) //Release Resource
s := s+1; /*Must be atomic*/ 
Init (Semaphore s, Integer v)
s := v;

ध्यान दें कि वेरिएबल "s" की वृद्धि को बाधित नहीं किया जाना चाहिए तथा "s" का मान 0 से बड़ा प्राप्त होने पर कार्य "P" में व्यवधान उत्पन्न नहीं किया जाना चाहिए.यह एक विशेष निर्देश, जैसे test-and-set (यदि संरचना का निर्देश-समूह इसका समर्थन करता हो), के प्रयोग द्वारा, अथवा (एकल प्रोसेसर वाले सिस्टम पर) अन्य प्रक्रियाओं को सक्रिय होने से रोकने के लिए व्यवधानों (Interrupts) को उपेक्षित करके किया जा सकता है।

एक सेमाफोर का मान संसाधन में रिक्त इकाइयों की संख्या के बराबर होता है। (यदि केवल एक ही संसाधन हो, तो 0 और 1 मानों वाले एक "बाइनरी सेमाफोर" का प्रयोग किया जाता है।) कार्य "P" व्यस्त-प्रतीक्षारत रहता है (अपनी बारी का उपयोग कुछ न करने के लिए करता है) या शायद तब तक सोया (Sleeps) रहता है (सिस्टम से कोई बारी न देने को कहता है), जब तक कि कोई संसाधन उपलब्ध न हो जाए और फिर तुरंत एक संसाधन पर दावा करता है।"V" इसका विपरीत है; प्रक्रिया द्वारा संसाधन का प्रयोग पूर्ण हो जाने पर यह केवल संसाधन उपलब्ध कराता है।"Init" का प्रयोग कोई भी निवेदन किये जाने से पहले सेमाफोर को केवल प्रारम्भिक मान प्रदान करने (Initialization) के लिए किया जाता है। कार्य "P" तथा "V" एटॉमिक होने चाहिए, जिसका अर्थ यह है कि उसी सेमाफोर पर कोई अन्य कार्य करने के लिए किसी भी प्रक्रिया को उन कार्यों के बीच में कभी भी रोका नहीं जाना चाहिए.

औपचारिक नामों, "P" और "V" की उत्पत्ति डच शब्दों के प्रथम अक्षरों से हुई है।"V" का अर्थ है "verhogen", अथवा "वृद्धि"."P " के लिए विभिन्न व्याख्याएं दीं गईं हैं ("परीक्षण करना" के लिए "proberen", "पारण (Pass)" के लिए "passeer", "प्रयास" "probeer" तथा "पकड़ना" "pakken" सहित), लेकिन वस्तुत: डिज्कस्ट्रा ने लिखा है कि "P" से उनका आशय निर्मित-शब्द "prolaag" था, जो "probeer te verlagen", या "प्रयास करो-और-घटाओ (try-and-decrease)" का संक्षिप्त रूप है, (एक कम अस्पष्ट और ज्यादा सटीक अनुवाद होगा "घटाने-"का" -प्रयास करो (try-to-decrease)".यह भ्रम इस तथ्य के कारण उत्पन्न होता है कि डच भाषा में "वृद्धि (Increase)" तथा "कमी (Decrease)" दोनों के लिए प्रयोग होने वाले शब्द "V" वर्ण से ही शुरू होते हैं और इन शब्दों के पूर्ण रूप का प्रयोग गैर-डच-वक्ताओं के लिए असंभव रूप से भ्रामक होगा.

प्रोग्रामिंग भाषा ALGOL 68 में, लिनक्स कर्नेल में तथा कुछ अंग्रेजी पाठ्यपुस्तकों में कार्यों, "P" और "V" को, क्रमश: "डाउन" तथा "अप" कहा जाता है। सॉफ्टवेयर इंजीनियरिंग की पद्धति में उन्हें अक्सर "wait" तथा "signal", या "acquire" तथा "release" (जिनका प्रयोग मानक जावा लाइब्ररी में होता है), या "pend" तथा "post" कहा जाता है। मूल डच आद्याक्षरों से मिलान करने के लिए कुछ पुस्तकों में इन्हें "procure" तथा "vacate" कहा जाता है।

व्यस्त-प्रतीक्षा (busy-waiting) से बचने के लिए सेमाफोर में प्रक्रियाओं की एक सम्बद्ध कतार (queue) हो सकती है (सामान्यत: फर्स्ट-इन, फर्स्ट-आउट).यदि कोई प्रक्रिया किसी ऐसे सेमफोर पर एक "P" कार्य करती है, जिसका मान शून्य है, तो इस प्रक्रिया को सेमफोर की क्यू में जोड़ दिया जाता है। जब कोई अन्य प्रक्रिया "V" कार्य करके सेमाफोर को बढ़ाती है और क्यू में प्रक्रियाएं उपस्थित हैं, तो उनमें से एक को क्यू से हटा दिया जाता है और उसका क्रियान्वयन पुन: प्रारम्भ होता है। जब प्रक्रियाओं की प्राथमिकताएं (Priorities) भिन्न होती हैं, तो क्यू को प्राथमिकता के क्रम में रखा जा सकता है, ताकि उच्चतम प्राथमिकता वाली प्रक्रिया को क्यू से सबसे पहले लिया जाए.

परिचय
हार्डवेयर समर्थन
प्रयोग के उदाहरण
प्रोग्रामर्स द्वारा आज प्रयोग किये जाने वाले सेमाफोर