2009-07-21 14 views
7

मुझे निम्नलिखित आलेख मिला है: Use GCC-provided atomic lock operations to replace pthread_mutex_lock functionsपीसीसी के बजाय जीसीसी परमाणु बिल्टिन?

यह GCC Atomic Builtins को संदर्भित करता है।

क्या लेख सुझाव है, pthread तुल्यकालन उपकरण के बजाय जीसीसी परमाणु builtins उपयोग करने के लिए है।

यह एक अच्छा विचार है?

पीएस। MySQL पोस्ट स्पष्ट रूप से भ्रामक है। परमाणु बिल्टिन सभी pthread उपकरणों को प्रतिस्थापित नहीं कर सकते हैं। उदाहरण के लिए, लॉकिंग की आवश्यकता होती है, कि अगर लॉक अधिग्रहित नहीं किया जा सकता है, तो थ्रेड को प्रतीक्षा करनी होगी। दूसरे शब्दों में, यह ओएस को प्रतीक्षा करने के लिए कहता है, ताकि प्रतीक्षा निष्क्रिय हो। सरल जीसीसी बिल्टिन ऐसा नहीं कर सकता है।

उत्तर

5

यह एक अच्छा विचार है?

यदि आप कभी भी जीसीसी के अलावा किसी अन्य चीज़ के साथ कोड संकलित करने का इरादा नहीं रखते हैं। क्या पर्थ्रेड आपको कोई विशिष्ट समस्याएं पैदा कर रहा है?

+0

pthreads के साथ कोई समस्या नहीं है, बस सोच रहा है कि क्या यह उन जीसीसी बिल्टिन पर स्विच करने के लिए फायदेमंद होगा। मैं हमेशा जीसीसी का उपयोग करके संकलित करता हूं, इसे बदलने की कोई संभावना नहीं है। –

+1

"यदि यह तोड़ा नहीं गया है, तो इसे ठीक न करें" मेरा आदर्श वाक्य है। –

+0

इन बिल्टिन को इंटेल द्वारा परिभाषित किया गया था, जैसा कि पृष्ठ का उल्लेख है; मुझे उम्मीद है कि वे अन्य कंपाइलरों पर भी काम करेंगे। – CesarB

1

नहीं। जीसीसी बिल्ट-इन्स शायद उन लोगों को अच्छी समझ में आता है जो ऑपरेटिंग सिस्टम, libc, और शायद खुद को pthreads लिखते हैं, लेकिन आपके औसत आवेदन के लिए pthreads दृष्टिकोण का उपयोग न करने का कोई कारण नहीं है।

और अगर आप हमेशा जीसीसी उपयोग करते हैं, कुछ दिन आप एक स्थिर विश्लेषण उपकरण है जो सभी ग्राहक जीसीसी एक्सटेंशन संभाल नहीं होगा चलाने के लिए चाहते हो सकता है।

2

आप पहले से ही pthread उपयोग कर रहे हैं, और pthread ताला कार्यों को पहले से ही तुम क्या चाहते हो, तो यह pthread ताला कार्यों का उपयोग करने के लिए सबसे अच्छा है।

ये परमाणु builtins उच्च स्तर पुरातन के लिए सिर्फ बिल्डिंग ब्लॉक्स हैं; इन उच्च स्तरीय प्राइमेटिव्स को लिखना मुश्किल हो जाता है, और कोई भी गलती त्रुटियों का कारण बन सकती है जो दिखाने के लिए काफी समय ले सकती है (क्योंकि वे आम तौर पर समय पर निर्भर करते हैं)। यदि आपके पास पहले से ही उच्च स्तरीय प्राइमेटिव्स वाली लाइब्रेरी है जो आप चाहते हैं और अपनी आवश्यकताओं के लिए पर्याप्त तेज़ हैं (और यह न मानें कि वे बहुत धीमे हैं क्योंकि आपको फ़ंक्शन कॉल करना है), तो सबसे अच्छा नहीं है पहिया।

0

परमाणु builtins मतलब आप प्रदर्शन में सुधार करना चाहते हैं। बिल्टिन आपको म्यूटेक्स के क्रमबद्धरण के कारण विवाद को कम करने की अनुमति देता है। जब आप म्यूटेक्स का उपयोग करते हैं और एक महत्वपूर्ण सत्र बनाते हैं तो आप अपने कोड के उस अनुभाग तक पहुंच को क्रमबद्ध करते हैं; प्रदर्शन कोड में आप थ्रेड-विशिष्ट डेटा का उपयोग करके और परमाणुओं का उपयोग करके संभव नहीं होने पर विवाद से बचने की कोशिश कर सकते हैं। अंतिम मामला लॉक हो रहा है और लॉक होने पर, उस समय को कम करें जब लॉक आयोजित किया जाता है (मैसेजिंग और डबल-चेक लॉकिंग का उपयोग करके कुछ दावा करते हैं कि यह काम नहीं करता है - मेरे लिए काम करता है)।

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