मैं हर जगह समवर्ती प्रोग्रामिंग के बारे में सुनता रहता हूं। क्या आप लोग इस बारे में कुछ प्रकाश डाल सकते हैं कि यह क्या है और कैसे सी ++ नए मानकों को ऐसा करने में सुविधा मिलती है?समवर्ती प्रोग्रामिंग सी ++?
उत्तर
Concurrency आपके कोड के बारे में एक ही समय में कई चीजें करने के बारे में है। यह आमतौर पर स्पष्ट "धागे" के साथ किया जाता है, लेकिन अन्य संभावनाएं भी होती हैं। उदाहरण के लिए, यदि आप अपने कोड में ओपनएमपी निर्देशों का उपयोग करते हैं तो ओपनएमपी का समर्थन करने वाला एक कंपाइलर स्वचालित रूप से आपके लिए थ्रेड उत्पन्न करेगा।
थ्रेड "निष्पादन के धागे" के लिए छोटा है। एकल-थ्रेडेड सी ++ प्रोग्राम में, निष्पादन मुख्य() पर शुरू होता है, और फिर अनुक्रमिक फैशन में आगे बढ़ता है। एक बहु थ्रेडेड प्रोग्राम में, पहला धागा मुख्य पर शुरू होता है, लेकिन उपयोगकर्ता द्वारा निर्दिष्ट फ़ंक्शन पर शुरू होने वाले एप्लिकेशन द्वारा अतिरिक्त थ्रेड शुरू किए जा सकते हैं। ये फिर समवर्ती रूप से, या मूल धागे के साथ समानांतर में चलते हैं।
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
नया C++ 0x मानक भी समर्थन करता है::
C++ 0x धागे में std::thread
वर्ग का उपयोग शुरू कर रहे हैं std::atomic<>
वर्ग टेम्पलेट के साथ
- परमाणु मूल्यों और संचालन,
- डेटा सुरक्षा के लिए म्यूटेक्स (
std::mutex
,std::recursive_mutex
, आदि) - लॉक कक्षाएं ताला जीवनकाल (
std::lock_guard<>
,std::unique_lock<>
) std::lock
औरstd::try_lock
कार्यों गतिरोध- हालत एक घटना के लिए इंतज़ार कर कम करने के लिए चर का जोखिम लिए बिना एक ही समय में एक से अधिक ताले प्राप्त करने के प्रबंधन के लिए प्रबंधन के लिए आर आसानी (
std::condition_variable
,std::condition_variable_any
) - वायदा , धागे के बीच गुजरने वाले डेटा को सरल बनाने के लिए वादे और पैक किए गए कार्यों, और एक मूल्य तैयार होने की प्रतीक्षा कर रहे हैं। यह क्लासिक "मैं धागे से एक मूल्य कैसे वापस कर सकता हूं" प्रश्न को संबोधित करता है।
- धागा सुरक्षित स्थानीय स्थिर का आरंभीकरण वस्तुओं
thread_local
कीवर्ड धागे की स्थानीय डेटा
घोषित करने के लिए मैं devx पर मेरे लेख में नए C++ 0x धागा पुस्तकालय के एक अधिक विस्तृत सिंहावलोकन दे दी है। कॉम: Simpler Multithreading in C++0x
मैं my blog पर सी ++ में मल्टीथ्रेडिंग और समरूपता के बारे में लिखता हूं। मैं विषय पर एक पुस्तक भी लिख रहा हूं: C++ Concurrency in Action।
क्या कुछ भी जोड़ा जा सकता है कि सी ++ 11 बाहर है? मैं कल्पना कर सकता हूं कि अब हम हिल अर्थशास्त्र का उपयोग कर सकते हैं? – Damian
हां आप 'std :: thread' और 'std :: async' के साथ move semantics का उपयोग कर सकते हैं। –
शायद इस वीडियो को आप के लिए कुछ रोशनी डालेगी :-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
संगामिति एक दिया प्रक्रिया के लिए निष्पादन की एक से अधिक थ्रेड चल रहा है मदद कर सकता है। आज तक, सी ++ सीधे इसका समर्थन नहीं करता है। हालांकि, कई पुस्तकालय मौजूद हैं जो किसी दिए गए फ़ंक्शन को निष्पादन के नए धागे से जोड़ देंगे। यूनिक्स मानक पाथ्रेड लाइब्रेरी है।
पॉज़िक्स मानक (यूनिक्स नहीं) –
जब आप कहते हैं कि "कैसे सी ++ नए मानकों को समेकित प्रोग्रामिंग" सुविधा मिलती है, तो मुझे लगता है कि आप सी ++ 09 मानक जारी करने के लिए जल्द ही (?) के बारे में बात कर रहे हैं।
नए मानक के रूप में यह वर्तमान में मसौदा रूप में खड़ा है निम्नलिखित मदों है कि समवर्ती प्रोग्रामिंग के साथ मदद का समर्थन करता है:
- परमाणु प्रकार और पते
- एक धागा वर्ग
- thread_local भंडारण (जो सिर्फ जोड़ा गया है कुछ महीने पहले मसौदे मानक में)
- पारस्परिक बहिष्करण (म्यूटेक्स कक्षाएं)
- हालत चर - यह विशेष रूप से विंडोज के लिए अच्छा है, क्योंकि आयन चर को Win32 में सही ढंग से कार्यान्वित करना मुश्किल है। इसका मतलब है कि अंततः माइक्रोसॉफ्ट को कम से कम एमएसवीसी ++ रनटाइम में हालत चर के लिए समर्थन प्रदान करना चाहिए, इसलिए WIn32 पर सही स्थिति परिवर्तनीय अर्थशास्त्र प्राप्त करना आसान होगा।
क्या किसी ने अभी तक इन सुविधाओं के बारे में एक अच्छा सारांश लिखा है? –
मुझे लगता है कि वे बूस्ट :: थ्रेड पर भारी आधारित हैं इसलिए उस दस्तावेज़ और नए मानक के बीच बहुत अंतर नहीं होना चाहिए। – gbjbaanb
मेरी अलग नज़र से, प्रोग्रामिंग मानदंड के भविष्य दिशाओं के लिए विशिष्ट:
कन्करेंसी अपने कार्यक्रम ऐसी है कि वह एक बार हार्डवेयर यह समर्थन करता है तो साथ कई काम करने जा सकती है, लिखने के बारे में है। वर्तमान में, अधिकांश भाषाओं में प्रोग्रामर को यह निर्दिष्ट करने की अनुमति देने के लिए काफी भारी और जटिल तंत्र हैं (उदाहरण: मैन्युअल सिंक्रनाइज़ेशन के साथ धागे, ओपनएमपी प्री-प्रोसेसर निर्देश आदि)।
जैसे हार्डवेयर में सुधार होता है, यह लंबवत (तेज एकल कोर) के बजाय क्षैतिज (अधिक कोर) में सुधार करने जा रहा है। इसका मतलब है कि "तेज" हार्डवेयर के साथ स्केल करने के लिए ऐप्स को "गुप्त सहमति" की आवश्यकता होगी। भविष्य में विकास के लिए सर्वोत्तम भाषा की स्थिति में रहने के लिए भाषाएं वर्तमान में इसका समर्थन करने की कोशिश कर रही हैं।
सी ++ 0x प्रोग्रामिंग समरूपता के "पुराने" तरीकों के लिए अधिक अंतर्निहित समर्थन जोड़ रहा है। विभिन्न कंपाइलर विक्रेता "नई" विधियां जोड़ रहे हैं जो थ्रेडिंग मॉडल को सारणी देते हैं और धागे की संख्या आदि पर रन-टाइम फैसलों की अनुमति देते हैं (मशीन के हार्डवेयर के आधार पर); विशेष रूप से माइक्रोसॉफ्ट के लिए, एफ #, समवर्ती रनटाइम, समांतर एक्सटेंशन इत्यादि देखें।
आशा है कि मदद करता है।
सी ++ CSP2 - आराम कन्करेंसी सी ++
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
सीएसपी के लिए एक एक उचित समवर्ती प्रतिमान पर आधारित है के रूप में धागे और ताले और चीजें हैं जो एक बाद का विचार के रूप में पर हमला बोला जाता है के अन्य सभी तरीके का विरोध किया ।
लेख (एक समवर्ती प्रोग्रामिंग भाषा (भी सीएसपी के आधार पर) के लिए Occam-पाई देखें): इन लेखों की जाँच करें संगामिति
- Free lunch is over
- Selected articles by herbsutter
- Link to pdf के बारे में पता करने के लिए
क्या आप लेखों के मुख्य बिंदुओं का सारांश जोड़ना चाहते हैं, या यह एक [लिंक-केवल-उत्तर] है (http://meta.stackexchange.com/questions/72000/should-there-be-a- नीति-के बारे में-एक-लिंक-केवल-जवाब)? (लिंक में से एक पहले से ही मर चुका है, बीटीडब्ल्यू।) – jogojapan
यह है समवर्ती प्रोग्रामिंग को समझने का सबसे अच्छा लेख: Concurrent Programming
आपको इसे पढ़ने के बाद समवर्ती प्रोग्रामिंग और सी ++ की पूरी तस्वीर मिल जाएगी।
एक त्वरित सारांश के रूप में, हम कह सकते हैं कि समवर्ती प्रोग्रामिंग मल्टीटास्किंग करना है। जब कोई प्रोग्राम अवरुद्ध हो जाता है, तो यह अन्य चीजें कर सकता है। आम तौर पर हम नेटवर्क कनेक्शन की प्रतीक्षा करते समय और I/O से निपटने के दौरान अवरुद्ध हो जाते हैं। हम fork()
और धागे पुस्तकालयों का उपयोग कर समवर्ती प्रोग्रामिंग की सुविधा दे सकते हैं।
आपके द्वारा पोस्ट किया गया लिंक 404 देता है। – xyres
- 1. सेमफोर और समवर्ती प्रोग्रामिंग
- 2. समवर्ती प्रोग्रामिंग समानांतर प्रोग्रामिंग के समान है?
- 3. समवर्ती प्रोग्रामिंग तकनीकों, पेशेवरों, विपक्ष
- 4. सी # समवर्ती सूची प्रश्न
- 5. पायथन-सी एपीआई समवर्ती मुद्दा
- 6. समवर्ती मल्टीमैप
- 7. सी # प्रोग्रामिंग
- 8. समवर्ती प्रोग्रामिंग के लिए जावा के बजाय क्लोजर क्यों
- 9. प्रोग्रामिंग के कारण सी/सी ++
- 10. सी ++ 11 std :: वेक्टर समवर्ती वातावरण में
- 11. सी # स्मार्टकार्ड प्रोग्रामिंग
- 12. COM (सी ++) प्रोग्रामिंग ट्यूटोरियल?
- 13. सी, सॉकेट प्रोग्रामिंग: चुनिंदा()
- 14. गेम प्रोग्रामिंग लाइब्रेरी सी ++
- 15. सी प्रोग्रामिंग: + = बनाम = +
- 16. विंडोज जीयूआई सी ++ प्रोग्रामिंग
- 17. सी # असिन। सॉकेट प्रोग्रामिंग
- 18. उदात्त सी प्रोग्रामिंग भाषा
- 19. सरल सी प्रोग्रामिंग gui
- 20. सी # और ब्लूटूथ प्रोग्रामिंग
- 21. सी प्रोग्रामिंग। FizzBuzz कार्यक्रम
- 22. मेमोरी कुशल सी # प्रोग्रामिंग
- 23. सी ++ वितरित प्रोग्रामिंग
- 24. सी ++ यूएसबी प्रोग्रामिंग
- 25. संबंधित xrandr, सी प्रोग्रामिंग
- 26. NSOperationQueue और समवर्ती बनाम गैर-समवर्ती
- 27. जावा समवर्ती
- 28. सी/सी ++ के लिए इंटरएक्टिव कंसोल प्रोग्रामिंग?
- 29. शुद्ध-रूबी समवर्ती हैश
- 30. समवर्ती परिवर्तनीय प्राथमिकता कतार
यदि समवर्ती कंप्यूटिंग आपके लिए नई है तो http://en.wikipedia.org/wiki/Concurrent_programming जैसे कुछ मूल लेखों को देखना सुनिश्चित करें। – lothar