सी/सी ++ के साथ बहुप्रचारित अनुप्रयोग बनाने का सबसे आसान तरीका क्या है?सी/सी ++ के साथ बहुप्रचारित अनुप्रयोग बनाने का सबसे आसान तरीका क्या है?
उत्तर
दुर्भाग्य से कोई आसान तरीका नहीं है। विकल्पों का जोड़ा: लिनक्स पर pthread, विंडोज़ पर Win32 एपीआई थ्रेड या बूस्ट :: थ्रेड लाइब्रेरी
यह कुछ ऐसा है जो मैं असहनीय मानता हूं, विशेष रूप से बढ़ावा देने की सिफारिश बनाम। Posix Win32 वातावरण के लिए आसानी से पोर्टेबल नहीं है, और एपीआई आदिम के बारे में है जैसा आप प्राप्त कर सकते हैं। – Jherico
वैसे यह स्पष्ट रूप से मल्टीथ्रेडिंग प्रोग्रामिंग को आसान बनाने वाला नहीं है, लेकिन कम से कम यह अच्छी तरह से प्रलेखित है। –
विंडोज़ पर pthreads समर्थित हैं: http://sourceware.org/pthreads-win32/ सभी थ्रेडिंग एपीआई आदिम हैं ... यदि आप थ्रेडपूल, या अभिनेताओं, या धागे पर कुछ अन्य अमूर्तता का उपयोग कर सकते हैं तो आप उच्च स्तर चाहते हैं। –
वहाँ कोईआसानकिसी भी भाषा में एक बहु आवेदन बनाने के लिए रास्ता है।
यह सच नहीं है। कार्य के लिए सही भाषा का चयन मल्टीथ्रेड प्रोग्रामिंग को आसान बना सकता है। – Amok
मैंने सबसे आसान तरीका के बारे में पूछा – SomeUser
मल्टीथ्रेड प्रोग्रामिंग ** सरल ** एक साधारण भाषा को आसान ** देख सकता है, लेकिन यह सही होने के लिए सबसे कठिन प्रोग्रामिंग समस्याओं में से एक है। * यदि आपको लगता है कि आप सही मल्टीथ्रेडिंग को लागू करने के लिए पर्याप्त स्मार्ट हैं, तो आप सबसे अधिक नहीं हैं * – voyager
मैं Qt के साथ कहूंगा। क्यूटी थ्रेड और क्यूटी Concurrency शायद googling लायक हैं।
क्यूटी में एक सुंदर threading support and documentation है, लेकिन जैसा कि अन्य ने चेतावनी दी है कि यह शुरुआती लोगों के लिए नहीं है। दस्तावेज़ लिंक मैं ही दे दी है एक short reading list
C++0x विनिर्देश सूत्रण सुविधा भी शामिल है (एक मेरी पसंदीदा नई सुविधाओं के) को इंगित करता है। जल्द ही इससे कोई फर्क नहीं पड़ता कि आप किस ओएस के लिए संकलित कर रहे हैं! बस देखो कितना आसान है एक नया धागा बना सकते हैं और वापस निर्माता धागा करने के लिए शामिल होने के लिए है:
#include <thread>
#include <iostream>
class SayHello
{
public:
void operator()() const
{
std::cout<<"hello"<<std::endl;
}
};
int main()
{
std::thread t((SayHello()));
t.join();
}
विजुअल स्टूडियो 2010 C++ 0x के कुछ हिस्सों लागू कर रहा है लेकिन हम अभी भी सूत्रण सुविधाओं पर प्रतीक्षा कर रहे हैं।
जब तक आप सी ++ के साथ रखने के इच्छुक हैं, वैसे भी। यदि आप उस मामले को बनाना चाहते हैं, तो आप जावा में अभी यह कर सकते हैं। –
दोस्त .. प्रश्न सी/सी ++ निर्दिष्ट करता है। –
@ जेम्स, जब तक कि चीजें हाल ही में नहीं बदली हैं, मुझे नहीं लगता कि std :: धागा POSIX धागे जैसे मौजूदा कार्यान्वयन के लिए पूर्ण विकल्प नहीं होगा। विशेष रूप से इसमें थ्रेड प्राथमिकताओं जैसी विशेषताएं अनुपलब्ध हैं। विवरण के लिए यह SO उत्तर देखें: http://stackoverflow.com/questions/1273572/will-pthreads-become-obsolete-once-stdthread-makes-into-cox/1274301#1274301 ... भले ही, कोई इनकार नहीं किया जा रहा है :: धागा मानक के लिए एक बहुत स्वागत है। – Void
इसके बाद से मैं सी में काम किया ++ और मैं Boost सूत्रण समर्थन नहीं देखा है एक समय हो गया है, लेकिन मैं, यह बहुत semaphore ओएस द्वारा उपलब्ध कराई गई सेवाओं, आमतौर पर या तो POSIX या Win32 संपुटित करने के लिए उपयोगी पाया सरल वर्गों है कि होगा में ताले हासिल करें, और उन्हें विनाशकों में छोड़ दें, जिससे उनका उपयोग काफी सरल हो।
void operateOnSharedResource(SharableResource & foo) {
MutexLock lock(foo.getMutex());
// do stuff to foo
// implicit call to MutexLock dtor performs release
}
अंत में वहाँ इस तरह सरल चाल के बहुत सारे हैं धागा प्रोग्रामिंग कम करने के लिए और मैं अगर बूस्ट अब तक कुछ इस तरह नहीं था आश्चर्य होगा (संपादित करें: यह करता है और उसे Lock Types में दर्ज है)।
भले ही, बहु-थ्रेडेड कोड लिखने की मुख्य समस्या किसी भी तृतीय पक्ष लाइब्रेरी द्वारा हल नहीं की जा रही है, और यह समझ में आता है कि आपका कोड उपयोगी रूप से समानांतर कैसे किया जा सकता है, और जहां साझा संसाधनों को छुआ जा रहा है और उसकाखाता। मल्टी थ्रेडेड कोड लिखते समय मैं अंगूठे के कुछ नियमों का उपयोग करता हूं। साझा संसाधन
- कोशिश वर्ग रैपर कि सभी संचालन परमाणु बनाने में साझा संसाधनों को संपुटित की कोशिश करें।
- मेक कार्यकर्ता संभव
उचित कैप्सूलीकरण वास्तव में सुरक्षित मल्टी-थ्रेडेड कोड लिखने के लिए चमत्कार करता है के रूप में सरल सूत्र, क्योंकि कम चीज़ें आप देख सकते हैं, कम चीज़ें एक रेस स्थिति हो सकती है।
इसका कोई आसान जवाब नहीं है।यह मल्टीथ्रेडिंग, प्लेटफॉर्म/कंपाइलर, और कौन सा थ्रेडिंग मॉडल आप उपयोग करना चाहते हैं, उससे प्राप्त होने वाली चीज़ों पर बहुत निर्भर करता है। प्रत्येक थ्रेडिंग एपीआई में इसके नुकसान होते हैं।
और सिर्फ इसलिए कि कोई भी अब तक यह उल्लेख किया गया है, OpenMP कि कई आधुनिक मुख्यधारा compilers में समर्थित है और संगामिति के उपयोग को आसान बनाने का इरादा है एक और विकल्प है। http://openmp.org/wp/
बस इसे उल्लेख करने के लिए, क्योंकि यह उल्लेख नहीं किया गया है: OpenMP समर्थन (http://openmp.org/wp/)
मैं पूरी तरह से सहमत हूं! – Jacob
यदि आप इस मॉडल में अपने प्रोग्राम को फिट कर सकते हैं तो यह निश्चित रूप से सबसे आसान तरीका है। असल में मैं इस कारण से ओपनएमपी का उपयोग करके एक लघु परीक्षण कार्यक्रम लिखने की प्रक्रिया में हूं। –
के साथ एक संकलक के बारे में मैं सबसे आसान, लेकिन IMO सबसे उपयोगकर्ता के अनुकूल सूत्रण पुस्तकालय यकीन नहीं है पोको सी ++ प्रोजेक्ट में शामिल है। पूर्वावलोकन के लिए Thread.h शीर्षलेख फ़ाइल पर एक नज़र डालें।
Posix थ्रेड काफी अच्छा है, वे भी महान प्रलेखन और ट्यूटोरियल के साथ आते हैं।
जावा धागे जितना आसान नहीं है, लेकिन अभी भी काफी अच्छा है।
यह पूरी तरह से निर्भर करता है कि आप क्या कर रहे हैं। यदि आप ओपनएमपी में जो कर रहे हैं वह फिट कर सकते हैं तो यह जाने का तरीका है। अन्यथा आप Intel's TBB देख सकते हैं। टीबीबी कई वर्कफ़्लो प्रदान करता है जिन्हें आप फिट करने में सक्षम होना चाहिए, लेकिन लाइब्रेरी दोहरी लाइसेंस प्राप्त है और आप या तो लाइसेंस स्वीकार नहीं कर पाएंगे। यदि ओपनएमपी और टीबीबी दोनों बाहर हैं, तो आपको अपने ऑपरेटिंग सिस्टम के थ्रेड पूल क्षमताओं पर विचार करना चाहिए।
कुछ बिंदु आप गोली काटने और Boost.Thread उपयोग करना पड़ सकता पर। यदि ऐसा है, तो आप what makes multithreading in C++ hard पर देखना चाहेंगे (यदि आप सी ++ 0x का उपयोग नहीं कर रहे हैं तो भी पढ़ने के लिए अच्छा है: "यह धागे स्वयं नहीं है, यह संचार है जो समस्याओं का कारण बनता है। परिवर्तनीय साझा राज्य अंतर्निहित संचार पेश करता है," पृष्ठ 3)।
Boost.Thread अपेक्षाकृत आसान है क्योंकि यह पोर्टेबल, अच्छी तरह से प्रलेखित है और इसमें उच्च स्तरीय एपीआई है जैसे scoped_try_lock।
सबसे आसान तरीका है परहेज/परिवर्तनशील साझा राज्य को कम करके है।
एक बार जब आप परिवर्तनशील साझा किया है राज्य, आप ताला जो है, जहां मल्टी-थ्रेडेड कार्यक्रमों लिखित रूप में कठिनाई के थोक मौजूद है के साथ सौदा करने की जरूरत है।
वाले पहले ही उल्लेख किया इसके अलावा, ACE एक और लोकप्रिय और व्यापक रूप से तैनात सी ++ रूपरेखा है कि कई प्लेटफार्मों भर में धागा encapsulations प्रदान करता है। सी ++ की शैली Boost.Thread के रूप में आधुनिक नहीं है, उदाहरण के लिए, लेकिन यह काफी परिपक्व है।
- 1. structs की सरणी बनाने का सबसे आसान तरीका क्या है?
- 2. नियुक्ति बुकिंग वेबसाइट बनाने का सबसे आसान तरीका क्या है?
- 3. सी # के साथ एक्सेल टेबल बनाने का सबसे आसान तरीका क्या है?
- 4. OpenGL ES के साथ बनावट बनाने का सबसे आसान तरीका क्या है?
- 5. वसंत में मूल्यों के साथ सूची निर्दिष्ट करने का सबसे आसान तरीका क्या है?
- 6. ओपनजीएल: छाया और प्रकाश वॉल्यूम बनाने का सबसे आसान तरीका?
- 7. जावा में एक जीयूआई बनाने का सबसे आसान तरीका?
- 8. एक पूरी विधि थ्रेड-सुरक्षित बनाने का सबसे आसान तरीका?
- 9. सबसे आसान तरीका RavenDB
- 10. पीडीएफ से डेटा निकालने का सबसे आसान तरीका क्या है?
- 11. धूमकेतु चैट बनाने के लिए सबसे आसान तरीका
- 12. जावा में 'है' करने का सबसे आसान तरीका क्या है?
- 13. बहुप्रचारित अनुप्रयोग में अपवाद।
- 14. पायथन में उपज का उपयोग करके रिक्त पुनरावृत्ति बनाने का सबसे आसान तरीका क्या है?
- 15. ActiveResource के साथ OAuth का उपयोग करने का सबसे आसान तरीका क्या है?
- 16. एक बहुप्रचारित अनुप्रयोग का अंतिम धागा
- 17. गिट शाखा बनाने के दौरान पता लगाने का सबसे आसान/तेज़ तरीका क्या है?
- 18. एक अजगर पैकेज के लिए वैकल्पिक सी एक्सटेंशन बनाने का सबसे आसान तरीका क्या है?
- 19. सबसे आसान तरीका?
- 20. क्या जावास्क्रिप्ट लुकअप टेबल बनाने का कोई आसान तरीका है?
- 21. क्या कोडनिर्देशक पर सबडोमेन बनाने का कोई आसान तरीका है?
- 22. इंटरैक्टिव एप्लिकेशन प्रोटोटाइप बनाने का सबसे अच्छा तरीका क्या है?
- 23. सी #: समय घटाने का सबसे आसान तरीका क्या है?
- 24. jQuery/जावास्क्रिप्ट के साथ एक पुष्टिकरण संदेश बनाने का सबसे आसान तरीका?
- 25. सबसे आसान तरीका
- 26. SharePoint में, कस्टम सूची 'schema.xml' फ़ाइल बनाने का सबसे आसान तरीका क्या है?
- 27. ट्रिगर्स में निषेध करने का सबसे आसान तरीका क्या है?
- 28. कई HSQLDB सर्वर डेटाबेस बनाने का सबसे आसान तरीका क्या है?
- 29. UITableView फ़ॉर्म बनाने का सबसे अच्छा और आसान तरीका क्या है?
- 30. WxPython में आकार की विंडो बनाने का सबसे आसान तरीका क्या है?
समवर्ती कार्यक्रम लिखने का सबसे आसान तरीका धागे का स्पष्ट रूप से उपयोग नहीं करना है। तुम क्या करने की कोशिश कर रहे हो? – Amok
सी ++ का अगला संस्करण, जिसे प्यार से सी ++ 0x कहा जाता है, को थ्रेडिंग सुविधाएं मिल रही हैं: http://en.wikipedia.org/wiki/C%2B%2B0x#Threading_facilities – luke
ल्यूक - जो अभी भी नहीं जा रहा है इसे आसान बनाएं! –