2010-11-23 46 views
23

फ़ंक्शन pthread_mutex_init आपको किसी विशेषता के लिए पॉइंटर निर्दिष्ट करने की अनुमति देता है। लेकिन मुझे अभी तक क्या पठित गुणों का एक अच्छा स्पष्टीकरण मिल गया है। मैंने हमेशा न्यूल की आपूर्ति की है। क्या इस तर्क का कोई उपयोग है?एक pthread mutex की "विशेषता" क्या है?

प्रलेखन, आप में से जो लोग इसे भूल जाओ के लिए:

PTHREAD_MUTEX_INIT (3) बीएसडी लाइब्रेरी कार्य मैनुअल
PTHREAD_MUTEX_INIT (3)

नाम pthread_mutex_init - एक म्युटेक्स बनाने

SYNOPSIS

#include <pthread.h> 

int 
pthread_mutex_init(pthread_mutex_t *restrict mutex, 
    const pthread_mutexattr_t *restrict attr); 

विवरण pthread_mutex_init() फ़ंक्शन एक नया mutex बनाता है, विशेषता निर्दिष्ट एटआर के साथ निर्दिष्ट करता है। यदि अटल न्यूल है, तो डिफ़ॉल्ट विशेषताओं का उपयोग किया जाता है।

उत्तर

33

उस जानकारी को खोजने के लिए सबसे अच्छी जगह POSIX मानकों पृष्ठों से है।

NULL म्यूटेक्स विशेषता आपको कार्यान्वयन परिभाषित डिफ़ॉल्ट विशेषता देता है। यदि आप जानना चाहते हैं कि आप गुणों के साथ क्या कर सकते हैं, तो following reference देखें और SEE ALSO अनुभाग में pthread_mutexattr_* लिंक का पालन करें। आमतौर पर, डिफ़ॉल्ट गुणों का एक समझदार सेट है लेकिन यह प्लेटफ़ॉर्म के बीच भिन्न हो सकता है, इसलिए मैं ज्ञात विशेषताओं (पोर्टेबिलिटी के लिए बेहतर) के साथ स्पष्ट रूप से म्यूटेक्स बनाना पसंद करता हूं।

यह मानक, 1003.1-2008 के मुद्दे 7 के लिए है। इसके लिए शुरुआती बिंदु here है। नीचे बाईं ओर Headers पर क्लिक करने से आप विशिष्ट कार्यक्षमता (pthreads.h सहित) पर जा सकते हैं।

  • type (deadlocking, गतिरोध-पता लगाने, पुनरावर्ती, आदि):

    गुण आप सेट या प्राप्त करने के लिए अनुमति देते हैं।

  • robustness (क्या होता है जब आप एक म्यूटेक्स प्राप्त करते हैं और मूल मालिक इसे प्राप्त करते समय मृत्यु हो जाती है)।
  • process-shared attribute (प्रक्रिया सीमाओं में एक म्यूटेक्स साझा करने के लिए)।
  • protocol (उच्च प्राथमिकता वाले धागे म्यूटेक्स चाहता है जब प्राथमिकता के मामले में एक धागा कैसे व्यवहार करता है)।
  • priority ceiling (प्राथमिकता जिस पर महत्वपूर्ण अनुभाग चलाएगा, प्राथमिकता उलटा रोकने का एक तरीका)।

और पूर्णता के लिए, init and destroy calls भी है, साथ ही सीधे एक विशिष्ट विशेषता से संबंधित नहीं है बल्कि उन्हें बनाने के लिए उपयोग किया जाता है।

1

आप समारोह <pthread.h> के लिए लिस्टिंग नीचे स्क्रॉल, तो आप सहित एक म्युटेक्स के विभिन्न विशेषताओं को सेट करने के लिए एक init, destroy और कार्यों pthread_mutexattr_... कार्यों का एक गुच्छा मिल जाएगा। जब आप NULL गुजरती हैं, म्युटेक्स इन सभी विशेषताओं के लिए उपयुक्त चूक के साथ बनाई गई है, लेकिन यदि आप विशिष्ट विशेषताओं संशोधित करने की जरूरत है, तो आप एक pthread_mutexattr_t संरचना का निर्माण और में इसे पारित कर सकते हैं।

4

सभी म्युटेक्स गुण एक म्युटेक्स विशेषता में स्थापित कर रहे हैं प्रपत्र के एक समारोह से वस्तु:

int pthread_mutexattr_setname(pthread_attr_t *attr, Type t); 

सभी म्युटेक्स विशेषताओं प्रपत्र के एक समारोह से एक म्युटेक्स विशेषता वस्तु से प्राप्त किए गए हैं:

int pthread_mutexattr_getname(const pthread_attr_t *attr, Type *t); 

जहां नाम और प्रकार टैब में के रूप में परिभाषित कर रहे हैं नीचे ले:

Type and Name Description and Value(s) 
int protocol Define the scheduling classes for mutex locks 
       PTHREAD_PRIO_NONE,PTHREAD_PRIO_PROTECT, 
       PTHREAD_PRIO_INHERIT 

int pshared Defines whether a mutex is shared with other processes. 
       PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE 

int prioceiling Used for mutex attribute priority ceiling values. 
       See POSIX.1 section 13 

int type Application defined mutex locking 
       PTHREAD_MUTEX_NORMAL,PTHREAD_MUTEX_RECURSIVE, 
       PTHREAD_MUTEX_ERRORCHECK,PTHREAD_MUTEX_DEFAULT 
0

इस तर्क के लिए न्यूल लागू करने से डिफ़ॉल्ट तर्क का उपयोग करना है। तो कुछ कारणों से आप इन डिफ़ॉल्ट सेटिंग्स को बदलना चाहते हैं (pthread_mutexattr_init का उपयोग करके)।

प्रलेखन आपको इन म्यूटेक्स सेटिंग्स के बारे में आवश्यक सभी बताता है।

+3

यदि दस्तावेज़ीकरण सभी उपयोगी थे, तो सवाल पूछने की आवश्यकता नहीं होगी। :-) मैं एक ही प्रश्न के उत्तर खोजने के लिए एक घंटे के बेहतर हिस्से की कोशिश कर रहा हूं, इससे पहले कि मैं इस पर ठोकर खाऊं। –

संबंधित मुद्दे