pthreads

From alpha
Jump to navigation Jump to search

POSIX थ्रेड्स, जिसे आमतौर पर pthreads के रूप में जाना जाता है, एक निष्पादन मॉडल है जो एक भाषा से स्वतंत्र रूप से मौजूद है, साथ ही एक समानांतर निष्पादन मॉडल भी है। यह एक प्रोग्राम को काम के कई अलग-अलग प्रवाहों को नियंत्रित करने की अनुमति देता है जो समय में ओवरलैप होते हैं। कार्य के प्रत्येक प्रवाह को थ्रेड (कंप्यूटिंग) के रूप में संदर्भित किया जाता है, और इन प्रवाहों पर निर्माण और नियंत्रण POSIX थ्रेड्स API को कॉल करके प्राप्त किया जाता है। POSIX थ्रेड्स मानक POSIX.1c, थ्रेड्स एक्सटेंशन (IEEE Std 1003.1c-1995) द्वारा परिभाषित एक अप्लिकेशन प्रोग्रामिंग अंतरफलक है।

एपीआई का कार्यान्वयन कई यूनिक्स-जैसे पॉज़िक्स-अनुरूप ऑपरेटिंग सिस्टम जैसे फ्रीबीएसडी, नेटबीएसडी, ओपनबीएसडी, लिनक्स, मैकोज़, एंड्रॉइड (ऑपरेटिंग सिस्टम) पर उपलब्ध है।[1] Solaris (ऑपरेटिंग सिस्टम), Redox (ऑपरेटिंग सिस्टम), और AUTOSAR एडेप्टिव, आमतौर पर एक लाइब्रेरी libpthread के रूप में बंडल किए जाते हैं। DR-DOS और Microsoft Windows कार्यान्वयन भी मौजूद हैं: UNIX|SFU/SUA सबसिस्टम के लिए Windows सेवाओं के भीतर जो कई POSIX API का मूल कार्यान्वयन प्रदान करता है, और तृतीय-पक्ष सॉफ़्टवेयर घटक के भीतर भी|तृतीय-पक्ष पैकेज जैसे pthreads-w32,[2] जो मौजूदा Windows API के शीर्ष पर pthreads को लागू करता है।

सामग्री

pthreads C (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग लैंग्वेज डेटा टाइप, फंक्शन (कंप्यूटर साइंस) और स्थिरांक के एक सेट को परिभाषित करता है। इसे ए के साथ लागू किया गया है pthread.h हेडर और थ्रेड पुस्तकालय (कम्प्यूटिंग)

लगभग 100 थ्रेड प्रक्रियाएँ हैं, सभी प्रीफ़िक्स्ड हैं pthread_ और उन्हें चार समूहों में वर्गीकृत किया जा सकता है:

  • धागा प्रबंधन - धागे बनाना, जोड़ना आदि।
  • म्युटेक्स
  • स्थिति चर

रीडर्स-राइटर_लॉक और बैरियर_(कंप्यूटर_साइंस) का उपयोग करके थ्रेड्स के बीच *सिंक्रनाइज़ेशन (कंप्यूटर साइंस)

POSIX सेमाफोर (प्रोग्रामिंग) API, POSIX थ्रेड्स के साथ काम करता है, लेकिन POSIX.1b, रीयल-टाइम एक्सटेंशन (IEEE Std 1003.1b-1993) मानक में परिभाषित थ्रेड मानक का हिस्सा नहीं है। नतीजतन, सेमाफोर प्रक्रियाओं द्वारा उपसर्ग किया जाता है sem_ के बजाय pthread_.

उदाहरण

C में pthreads के उपयोग को दर्शाने वाला एक उदाहरण:

<वाक्यविन्यास प्रकाश लैंग = सी>

  1. शामिल <stdio.h>
  2. शामिल <stdlib.h>
  3. शामिल <assert.h>
  4. शामिल <pthread.h>
  5. शामिल <unistd.h>
  1. NUM_THREADS 5 परिभाषित करें

शून्य * प्रदर्शन_कार्य (शून्य * तर्क) {

 इंट इंडेक्स = * ((इंट *) तर्क);
 int स्लीप_टाइम = 1 + रैंड ()% NUM_THREADS;
 प्रिंटफ (थ्रेड% डी: प्रारंभ। \ n, अनुक्रमणिका);
 प्रिंटफ (थ्रेड% डी:% डी सेकेंड के लिए सो जाएगा। \ n, इंडेक्स, स्लीप_टाइम);
 नींद (नींद_समय);
 प्रिंटफ (थ्रेड% डी: समाप्त। \ n, इंडेक्स);
 वापसी शून्य;

}

पूर्णांक मुख्य (शून्य) {

 pthread_t धागे [NUM_THREADS];
 इंट थ्रेड_आर्ग्स [NUM_THREADS];
 int मैं;
 int result_code;
 
 // एक-एक करके सभी थ्रेड्स बनाएं
 के लिए (i = 0; i <NUM_THREADS; i++) {
   प्रिंटफ (मुख्य में: थ्रेड% डी बनाना। \ n, i);
   थ्रेड_आर्ग्स [i] = i;
   परिणाम_कोड = pthread_create (& धागे [i], NULL, Perform_work, और thread_args [i]);
   मुखर (!result_code);
 }
 प्रिंटफ (मुख्य रूप से: सभी धागे बनाए गए हैं। \ n);
 // प्रत्येक थ्रेड के पूरा होने की प्रतीक्षा करें
 के लिए (i = 0; i <NUM_THREADS; i++) {
   परिणाम_कोड = pthread_join (धागे [i], NULL);
   मुखर (!result_code);
   प्रिंटफ (मुख्य में: थ्रेड% डी समाप्त हो गया है। \ n, i);
 }
 प्रिंटफ (मुख्य कार्यक्रम समाप्त हो गया है। \ n);
 वापसी 0;

}

</वाक्यविन्यास हाइलाइट>

यह प्रोग्राम पाँच थ्रेड बनाता है, प्रत्येक 'perform_work' फ़ंक्शन को निष्पादित करता है जो इस थ्रेड की अद्वितीय संख्या को मानक आउटपुट पर प्रिंट करता है। यदि कोई प्रोग्रामर चाहता है कि धागे एक-दूसरे के साथ संवाद करें, तो उसे किसी भी कार्य के दायरे के बाहर एक चर को परिभाषित करने की आवश्यकता होगी, जिससे इसे वैश्विक चर बना दिया जा सके। निम्नलिखित कमांड के साथ जीएनयू संकलक संग्रह कंपाइलर का उपयोग करके इस प्रोग्राम को संकलित किया जा सकता है:

जीसीसी pthreads_demo.c -pthread -o pthreads_demo

यहाँ इस प्रोग्राम को चलाने के कई संभावित आउटपुट में से एक है। <वाक्यविन्यास प्रकाश लैंग = आउटपुट> मुख्य रूप से: थ्रेड 0 बनाना। मुख्य में: थ्रेड 1 बनाना। मुख्य रूप से: थ्रेड 2 बनाना। मुख्य में: थ्रेड बनाना 3. थ्रेड 0: प्रारंभ। मुख्य में: थ्रेड बनाना 4. थ्रेड 3: प्रारंभ। थ्रेड 2: प्रारंभ। थ्रेड 0: 3 सेकंड के लिए सो रहे होंगे। थ्रेड 1: प्रारंभ। थ्रेड 1: 5 सेकंड के लिए सो रहे होंगे। थ्रेड 2: 4 सेकंड के लिए सो रहे होंगे। थ्रेड 4: प्रारंभ। थ्रेड 4: 1 सेकंड के लिए सो रहे होंगे। मुख्य रूप से: सभी धागे बनाए जाते हैं। थ्रेड 3: 4 सेकंड के लिए सो रहे होंगे। थ्रेड 4: समाप्त। थ्रेड 0: समाप्त। मुख्य रूप से: थ्रेड 0 समाप्त हो गया है। थ्रेड 2: समाप्त। थ्रेड 3: समाप्त। थ्रेड 1: समाप्त। मुख्य रूप से: थ्रेड 1 समाप्त हो गया है। मुख्य रूप से: थ्रेड 2 समाप्त हो गया है। मुख्य रूप से: थ्रेड 3 समाप्त हो गया है। मुख्य रूप से: थ्रेड 4 समाप्त हो गया है। मुख्य कार्यक्रम समाप्त हो गया है। </वाक्यविन्यास हाइलाइट>

विंडोज़ के लिए पॉज़िक्स थ्रेड्स

विंडोज मूल रूप से pthreads मानक का समर्थन नहीं करता है, इसलिए Pthreads4w प्रोजेक्ट एक पोर्टेबल और ओपन-सोर्स रैपर कार्यान्वयन प्रदान करना चाहता है। इसका उपयोग यूनिक्स सॉफ्टवेयर (जो pthreads का उपयोग करता है) को विंडोज प्लेटफॉर्म पर बहुत कम या बिना किसी संशोधन के पोर्ट करने के लिए भी किया जा सकता है।[4] Pthreads4w संस्करण 3.0.0[5] या बाद में, अपाचे पब्लिक लाइसेंस v2.0 के तहत जारी किया गया, 64-बिट या 32-बिट विंडोज सिस्टम के साथ संगत है। संस्करण 2.11.0,[6] LGPLv3 लाइसेंस के तहत जारी, 64-बिट या 32-बिट संगत भी है।

Mingw-w64 प्रोजेक्ट में pthreads, winpthreads का एक आवरण कार्यान्वयन भी शामिल है, जो Pthreads4w प्रोजेक्ट की तुलना में अधिक देशी सिस्टम कॉल का उपयोग करने का प्रयास करता है।[7] UNIX के लिए Windows सेवाओं में उपलब्ध Interix पर्यावरण सबसिस्टम | UNIX-आधारित एप्लिकेशन पैकेज के लिए UNIX/सबसिस्टम के लिए Windows सेवाएँ pthreads API का एक मूल पोर्ट प्रदान करता है, अर्थात Win32 API पर मैप नहीं किया गया है, लेकिन सीधे ऑपरेटिंग सिस्टम syscall इंटरफ़ेस पर बनाया गया है।[8]


यह भी देखें

संदर्भ

  1. "libc/bionic/pthread.c - platform/bionic - Git at Google". android.googlesource.com.
  2. "Pthread Win-32: Level of standards conformance". 2006-12-22. Retrieved 2010-08-29.
  3. "pthread.h(0p) — Linux manual page". Retrieved 18 December 2022.
  4. Hart, Johnson M. (2004-11-21). "Experiments with the Open Source Pthreads Library and Some Comments". Archived from the original on 2010-08-30. Retrieved 2010-08-29.
  5. https://sourceforge.net/projects/pthreads4w/files/ -- File: pthreads4w-code-v3.0.0.zip -- Source for pthreads4w v3.0.0
  6. https://sourceforge.net/projects/pthreads4w/files/ -- File: pthreads4w-code-v2.11.0.zip -- Source for pthreads4w v2.11.0
  7. see http://locklessinc.com/articles/pthreads_on_windows which is where it was originally derived from
  8. "Chapter 1: Introduction to Windows Services for UNIX 3.5".


अग्रिम पठन


बाहरी संबंध