2009-11-10 19 views
10

मैं स्टैक ओवरफ़्लो पर एक नौसिखिया हूं। मैं सी/सी ++ में यूनिक्स प्लेटफॉर्म पर काम कर रहा हूं। इन संबंधों में बुनियादी प्रोग्रामिंग को जानना मैं multithreading से कैसे शुरू कर सकता हूं?मैं मल्टीथ्रेड प्रोग्रामिंग का उपयोग कैसे शुरू करूं?

मल्टीथ्रेडिंग बहुत दिलचस्प लगती है और मैं इस संबंध में अपना ज्ञान बढ़ाना चाहता हूं।

मैं मल्टीथ्रेडिंग के साथ कैसे शुरुआत कर सकता हूं और जितनी जल्दी हो सके अवधारणाओं को पकड़ने के लिए उपलब्ध सर्वोत्तम तकनीकों/पुस्तकों/ईबुक/आलेख क्या हैं?

+1

नीचे अच्छे उत्तरों। मुझे डर था कि आपको "इस एपीआई का उपयोग करने का एक टन मिलेगा। यह ज़े बेइविएसेस्ट !!" लेकिन सबसे महत्वपूर्ण बात यह है कि मैं यहां दोहराऊंगा: उपयोग की गई एपीआई अपरिवर्तनीय है। ज्यादातर अवधारणाएं एपीआई के बावजूद लागू होती हैं। नीचे पोस्ट किए गए कुछ संसाधन पढ़ें। ऐसी समस्या चुनें जो आपको लगता है कि आप लंबित कर सकते हैं, फिर इसे आज़माएं। –

+1

जो भी आप करते हैं, एक ** उच्च स्तरीय ** एपीआई से शुरू करें। यह जानने से पहले कि यह विस्तार से कैसे काम करता है, ठीक से सामान कैसे करें। –

+0

@static_rtti किस बिंदु पर? डेडलॉक और पारस्परिक बहिष्कार की मूल बातें समझना टाला नहीं जा सकता है। मॉनिटर के दायरे में प्रवेश करने के बाद कुछ निचले स्तर के एपीआई इस उच्च समझ वाले लोगों की तुलना में अधिक समझते हैं जो आपके लिए लॉकिंग करते हैं। मैं अनुशंसा करता हूं कि आप उस व्यक्ति से शुरू करें जो आपको उच्च या निम्न स्तर के बारे में चिंता करने के बजाय, आपको अधिक समझ में आता है। इसके अतिरिक्त, वे लोग होंगे जो आपके खिलाफ बहस करते हैं, कह रहे हैं कि जब तक आप विवरण नहीं जानते, तब तक आप नहीं जानते कि इसे सही तरीके से कैसे किया जाए। आपकी टिप्पणी किसी भी संबंध में वास्तव में सहायक नहीं थी। –

उत्तर

8

pthread, mutexes के बारे में अध्ययन और इसे लागू करने का प्रयास करें जो आपके लिए फायदेमंद होगा।

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

+0

योलिनक्स एक शानदार साइट है जिसमें आपको आवश्यक जानकारी के बारे में अच्छी जानकारी है। – ChadNC

+0

एसटीएल कंटेनर के लिए भी yolinux सीखने के लिए बहुत आसान जानकारी शामिल है। – Vivek

1

मुझे लगता है कि विकिपीडिया लेख Multithreading आप एक त्वरित अवलोकन देने के लिए और बाहरी लिंक का अनुसरण करके आप विषय का एक अच्छा सिंहावलोकन मिल जाएगा। उसके बाद - या इसके अतिरिक्त - आप तनेनबाम के Operating Systems: Design and Implementation (रास्ते में महान पुस्तक) पढ़ सकते हैं। लेकिन सबसे महत्वपूर्ण बात यह है कि - मेरी राय में - अपने हाथों को पाने के लिए। तो बस से एक नमूना आवेदन डाउनलोड करें ... मान लें The Code Project या जो भी वेबसाइट आप पाएंगे और इसके साथ खेलेंगे। देखें कि यदि आप ताले का उपयोग करते हैं या क्या होता है तो क्या होता है यदि दो धागे एक ही संसाधन तक पहुंचने का प्रयास करते हैं और यह कितनी बार होता है, आदि इससे मुझे लगता है कि आपको इसे बहुत जल्दी लटका दिया जाएगा। और उन तकनीकों के साथ मूल्यांकन करना और खेलना मजेदार है जो स्वयं के लिए नए हैं। ,

  1. बहु सूत्रण अनुप्रयोगों
  2. उपलब्ध एपीआई (pthread)

सीखना मल्टी-थ्रेडेड प्रोग्रामिंग कठिन है का उपयोग कैसे करें कैसे लिखने के लिए:

6

बहु सूत्रण प्रोग्रामिंग सीखना दो भाग होते हैं थेरे Linux Journal में प्रकाशित एक अच्छा लेख है जो आपको बुनियादी सिद्धांतों को समझने में मदद करेगा।

बेहतर pthreads मैं इस ट्यूटोरियल पढ़ने का सुझाव समझने के लिए - POSIX Threads Programming

भी O'rielly द्वारा एक अच्छी किताब बुलाया है PThreads Programming

+0

मैं O'Rielly पुस्तक से सहमत हूं ... मैंने इसे पढ़कर बहु-थ्रेडेड प्रोग्रामिंग की मेरी समझ को स्पष्ट रूप से स्पष्ट किया, भले ही मैं सी ++ में कुछ विवरणों में सहायता के लिए एक ढांचे का उपयोग कर समाप्त हुआ। –

0

शायद थोड़ा विवादास्पद है, लेकिन वास्तव में मेरे लिए cklicked multithreading जब मैं करने का प्रयास किया एक बार कोडिंग पहेली हल करें।

पहेली म्यूटेक्स का उपयोग किये बिना थ्रेड सुरक्षित कोड लिखने के बारे में थी। मेरे पहले प्रयास दुखी थे लेकिन जब मुझे अंततः यह मिला, तो यह बाइक की सवारी करना सीखने जैसा था - मैंने कभी भी समरूपता के बारे में अनिश्चित महसूस नहीं किया है।

कुछ बार मैंने प्रोग्रामर पर भी ठोकर खाई है जिन्होंने इस विषय पर किताबें पढ़ी हैं, लेकिन इस तथ्य की तरह सरल चीजों को समझने में विफल रहता है कि कभी-कभी एक असाइनमेंट असाइनमेंट परमाणु ऑपरेशन नहीं हो सकता है।

+0

"एक आदिम असाइनमेंट कभी-कभी परमाणु ऑपरेशन नहीं हो सकता है।" कई लोग नहीं जानते कि असाइनमेंट कोड में लिखे गए क्रम में निष्पादित नहीं किया जा सकता है और वास्तव में संकलक द्वारा पुन: व्यवस्थित किया जा सकता है जो जटिलताओं का कारण बन सकता है।मुझे इस संबंध में हर्ब सटर, स्कॉट मेयर्स और आंद्रेई अलेक्जेंड्रेसकू द्वारा प्रबुद्ध लेख पसंद हैं। – Modicom

+0

पहेली का समाधान लॉक-फ्री डिज़ाइन था, या क्या यह एक म्यूटेक्स (AKA dijkstra) के अलावा लॉकिंग तंत्र (जैसे डेकर के एल्गोरिदम) का उपयोग करता था? अगर यह एक लॉक-फ्री प्रकार का समाधान था, तो क्या आप किसी भी तरह की समस्या और समाधान पोस्ट करना चाहते हैं? –

+0

@ सॅन जांसिंटो: मुझे वास्तव में पहेली के बारे में इस तरह के विवरण याद नहीं है। मुझे यह भी वापस पछतावा नहीं है कि यह लगभग 8-9 साल पहले था और जिस मंच पर इसे पोस्ट किया गया था वह अब मौजूद नहीं है। – sharkin

0

सब कुछ आपके लक्ष्यों पर निर्भर करता है। पॉसिक्स धागे ढांचे के आधार पर हल की गई सामान्य बहु-थ्रेडिंग समस्याओं के साथ बहुत सारे कोड और आलेख हैं (मुझे यहां अच्छे लेखों की सिफारिशों की संख्या दिखाई देती है)।मुख्य सवाल यह है कि आप क्या बनाना चाहते हैं। कुछ कार्यों के लिए बहु-थ्रेडिंग जाने की अनुशंसा नहीं की जाती है।

यहाँ पुस्तक "Foundations of Multithreaded, Parallel, and Distributed Programming" जो चर्चा की विषय और जो मैं अनुशंसा करना चाहते हैं से संबंधित है। इसका सबसे महत्वपूर्ण लाभ 'पढ़ने के लिए अपेक्षाकृत आसान' शैली है लेकिन पॉज़िक्स धागे विचारधारा (जो सामान्य समस्या है) के लिए कोई मुश्किल संबंध नहीं है। बाकी

2

आप बहु सूत्रण पहली बार कर रहे हैं, तो मेरी सलाह पहली समीक्षा करने के लिए हो सकता है और बेहतर अपने सिस्टम पर आई/ओ को समझते हैं। ब्लॉकिंग बनाम गैर-अवरुद्ध I/O, सिग्नलिंग, एसिंक्रोनस रूटीन, कॉलबैक और कैटरिया को समझें। I/O शायद एक है, यदि प्राथमिक नहीं है, तो आपके प्रोग्राम में मल्टीथ्रेडिंग जोड़ने का कारण। उस ज्ञान के साथ आप पर्थ्रेड या जावा धागे पर एक पुस्तक ले सकते हैं, या बूस्ट थ्रेड लाइब्रेरी या अपनी पसंदीदा तकनीक के लिए एक और थ्रेडिंग लाइब्रेरी के चारों ओर अपने दिमाग को लपेट सकते हैं।

0

चूंकि यह यूनिक्स है क्यों प्रक्रियाओं और आईपीसी कॉम से शुरू नहीं होता है? यानी संदेश कतार, साझा स्मृति और म्यूटेक्स।

0

विभिन्न पुस्तकालय चौखटे और हे/एस सुविधाओं का अध्ययन निम्न स्तर संगामिति को समझने के लिए एक अच्छा तरीका है। उदाहरण जो आपको मिलते हैं, वे आपको थोड़े समय में समवर्ती कोड लिखना शुरू कर सकते हैं।

के बाद आप कुछ गतिरोध और साझा स्मृति भ्रष्टाचार का कोई मुद्दा माध्यम से अपने तरीके डिबग, तो आप पाएंगे कि आप के बारे में तर्क और अपने संगामिति समस्याओं सड़ते के लिए कुछ उपकरण की जरूरत है। मुझे व्यक्तिगत रूप से हर्ब सटर के The Pillars of Concurrency आलेख को शुरुआती बिंदु के रूप में पसंद है। विचार यह समझना है कि आपको समेकन की आवश्यकता क्यों है। क्या आप बेहतर प्रतिक्रिया समय, समांतर गणना, कारणों के कुछ संयोजन की तलाश में हैं?

को समझना "क्यों" आप एक बेहतर "क्या" को बढ़ावा मिलेगा। वहां से आप हमेशा अलग निम्न स्तर के दृष्टिकोण के लिए बाहर मकड़ी कर सकते हैं: Active Objects, monitor objects, message passing, etc। जैसा कि आपने कहा, इस क्षेत्र में बहुत कुछ पता है।

1

मैं इस tutorial बहुत जानकारीपूर्ण और स्पष्ट रूप से लिखा पाया। उम्मीद है कि यह सहायक है।

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