2011-08-03 10 views
7

संभव डुप्लिकेट:
PThread vs boost::thread?बूस्ट थ्रेड लाइब्रेरी या पर्थ्रेड में प्रमुख अंतर क्या हैं?

मैं समय मैं समझ गया क्या multithreading है के बाद से pthreads पुस्तकालय प्रोग्रामिंग उदाहरण उपयोग किया गया है। देर से मैं इंटरनेट पर बूस्ट थ्रेड लाइब्रेरी में आया और उत्सुक हो गया। क्या कोई निर्दिष्ट कर सकता है कि दोनों के बीच प्रमुख अंतर क्या हैं? क्या बूस्ट से कोई अतिरिक्त विशेषाधिकार है, यदि हां तो वे क्या हैं?

अग्रिम धन्यवाद, श्रद्धा

+0

@Code बंदर के लिए

  • आरए II समर्थन साहचर्य कंटेनरों में धागा आईडी के स्टोर करने के लिए एक पोर्टेबल तरीका गतिरोध
  • बिना एक साथ कई mutexes लॉक करने की क्षमता: बिल्कुल नहीं एक नकली है, लेकिन सबसे जवाब लागू किया जा सकता इस सवाल के लिए। – akappa

  • उत्तर

    2

    मेरे अनुभव में बढ़ावा :: धागा पुस्तकालय है कि बहुत बारीकी से pthreads को बांध कार्यक्षमता है। बूथ :: थ्रेड लाइब्रेरी के बाहर बाहरी पठकों में उपलब्ध कुछ चीजें हैं, लेकिन अभी भी बढ़ावा में उपलब्ध हैं (जैसे कि बूस्ट :: इंटरप्रोसेस में प्रदान किए गए सेमफोरस)।

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

    असल में, विंडोज़ की कुछ अंतर्निहित विशेषताएं हैं कि मैं Win32 के साथ अपने अनुभव से अधिक सटीक समकक्ष नहीं ढूंढ पा रहा हूं, और लगभग निश्चित रूप से मेरे सीमित जोखिम के कारण दोनों में प्रदान किया गया है बढ़ावा :: धागा और pthread पुस्तकालयों।

    0

    documentation of Boost.Thread से:

    Boost.Thread पोर्टेबल सी ++ कोड में साझा किए गए डेटा के साथ निष्पादन की एक से अधिक थ्रेड के उपयोग के लिए सक्षम बनाता है:

    पोर्टेबल

    pthread कुछ के अंतर्गत आता है वह यह है कि यूनिक्स सिस्टम, इसलिए यदि आप उन्हें अपने कोड में उपयोग करते हैं तो आपका कोड पोर्टेबल (कहना) विंडोज़ नहीं होगा। जबकि pthread एक 'सी' पुस्तकालय है

    सी ++

    Boost.Thread, एक सी ++ पुस्तकालय है: यदि आपका आवेदन सी ​​++ में लिखा है, तो आप उस का लाभ लेने के लिए अपने कोड को आसान बनाने में कर सकते हैं (उदाहरण के लिए डाल Thread एस कंटेनरों में ऑब्जेक्ट्स जो चलने योग्य अवधारणा को समझते हैं)।

    +0

    @celavek: हाँ, तो? – akappa

    11

    बूस्ट :: थ्रेड का डिज़ाइन दृढ़ता से प्रभावित था, लेकिन निश्चित रूप से सी लाइब्रेरी के बजाय सी ++ लाइब्रेरी के रूप में स्टाइल किया गया था। यहां कुछ मतभेद हैं जो मेरे दिमाग में आते हैं। मैं मतभेदों की एक विस्तृत सूची होने का दावा नहीं करता हूं।

    हालात pthreads कि बढ़ावा है :: धागा का अभाव:

    आप को बढ़ावा देने का उपयोग करते हैं :: थ्रेड आप अंतर्निहित pthread_t (या pthread_mutex_t, आदि प्राप्त कर सकते हैं) native_handle() सदस्य फ़ंक्शन को कॉल करके, और इसे वापस कार्यक्षमता प्राप्त करने के लिए उपयोग करें सीधे boost :: thread द्वारा प्रदान नहीं किया गया।

    • सेट शेड्यूलिंग मानकों (pthread_attr_setschedparam)
    • ढेर क्वेरी, हेरफेर (pthread_attr_getstacksize)
    • Mutex/प्राथमिकता क्वेरी, हेरफेर (pthread_mutex_getprioceiling)

    हालात को बढ़ावा देने :: धागा है कि है pthreads की कमी है:

    निम्नलिखित चीजें pthreads में की जा सकती हैं (सभी बूस्ट :: थ्रेड पाथ्रेड पर लागू किया गया है)। लेकिन इन चीजों को करने के लिए pthreads में स्पष्ट और प्रत्यक्ष API नहीं है।

    • एक धागा संभाल, और एक धागा आईडी
    • एक धागा आईडी कि "किसी भी धागा नहीं"
    • मनमाने ढंग से तर्क के साथ एक मनमाना functor पर एक धागा शुरू करने के लिए क्षमता का प्रतिनिधित्व कर सकते के लिए विभिन्न प्रकार के
    • की क्षमता के लिए मनमाने ढंग से तर्क
    • एक शर्त चर के लिए क्षमता एक मनमाना ताला-युक्त प्रकार पर प्रतीक्षा करने के लिए के साथ एक मनमाना functor "एक बार कॉल"
    • अनलॉक mutexes
    संबंधित मुद्दे