मुझे शायद कुछ स्पष्ट याद आ रही है, लेकिन मुझे std::condition_variable
और std::condition_variable_any
के बीच कोई अंतर नहीं दिखाई दे रहा है। हमें दोनों की आवश्यकता क्यों है?std :: condition_variable और std :: condition_variable_any के बीच क्या अंतर है?
उत्तर
std::condition_variable
अधिक विशिष्ट है, और इसलिए std::condition_variable_any
की लचीलापन की आवश्यकता नहीं होने पर अधिक कुशल हो सकता है।
N3290 से §30.5 [thread.condition]/1
कक्षा
condition_variable
एक शर्त चर है कि केवल प्रकारunique_lock<mutex>
की एक वस्तु पर इंतजार कर सकते हैं, कुछ प्लेटफॉर्म पर अधिकतम दक्षता की इजाजत दी जाती है। कक्षाcondition_variable_any
एक सामान्य शर्त चर प्रदान करता है कि उपयोगकर्ता द्वारा आपूर्ति किए गए लॉक प्रकारों की वस्तुओं पर प्रतीक्षा कर सकता है।
वास्तव में, LLVM के libC++ में, condition_variable_any
अधिक विशिष्ट condition_variable
(जो का उपयोग करता है pthread_cond_t) एक shared_mutex पर का उपयोग कर कार्यान्वित किया जाता है।
अंतर wait()
फ़ंक्शंस का पैरामीटर है। std::condition_variable
में सभी प्रतीक्षा फ़ंक्शंस std::unique_lock<std::mutex>&
प्रकार का लॉक पैरामीटर लें, जबकि std::condition_variable_any
के लिए प्रतीक्षा फ़ंक्शन सभी टेम्पलेट्स हैं, और Lockable&
प्रकार का लॉक पैरामीटर लें, जहां Lockable
टेम्पलेट पैरामीटर है।
इसका मतलब है कि std::condition_variable_any
उपयोगकर्ता परिभाषित म्युटेक्स और लॉक प्रकार के साथ काम कर सकते हैं, और boost::shared_lock
जैसी चीजों के साथ --- कुछ भी lock()
और unlock()
सदस्य कार्यों है।
उदा।
std::condition_variable_any cond;
boost::shared_mutex m;
void foo() {
boost::shared_lock<boost::shared_mutex> lk(m);
while(!some_condition()) {
cond.wait(lk);
}
}
जानकारी के लिए सी ++ 11 धागा पुस्तकालय का सिर्फ :: धागा कार्यान्वयन के लिए दस्तावेज़ देखें:
std::condition_variable
documentation
- 1. std :: merge और std :: set_union के बीच क्या अंतर है?
- 2. std :: condition_variable के notify_all() और notify_one() के बीच क्या अंतर है?
- 3. std :: quick_exit और std :: abort के बीच क्या अंतर है और std :: quick_exit क्यों आवश्यक था?
- 4. std :: is_integer और std :: is_integral के बीच अंतर?
- 5. "यूटीएफ -16" और "std :: wstring" के बीच क्या अंतर है?
- 6. std :: string :: c_str और std :: string :: डेटा के बीच क्या अंतर है?
- 7. क्या std :: set :: iterator और std :: set :: const_iterator के बीच कोई परिचालन अंतर है?
- 8. std :: move और unique_ptr :: रीसेट के बीच अंतर क्या हैं?
- 9. अंतर: std :: runtime_error बनाम std :: अपवाद()
- 10. क्या आप std :: condition_variable के साथ std :: recursive_mutex को जोड़ सकते हैं?
- 11. -std = C++ 11 और -std = gnu ++ 11 के बीच अंतर क्या हैं?
- 12. सी ++ 11: std :: condition_variable std :: unique_lock का उपयोग क्यों करता है?
- 13. अभ्यास में std :: sort और std :: stable_sort के बीच प्रदर्शन अंतर कितना बड़ा है?
- 14. std :: इंडेक्स और डालने के बीच मानचित्र अंतर
- 15. std :: vector और std :: list
- 16. क्या "std :: और" या "std :: या" जैसे कुछ भी है?
- 17. std, tr1 और boost (नामस्थान और/या पुस्तकालयों के रूप में) के बीच अंतर क्या हैं?
- 18. std :: हैश_सेट बनाम std :: unordered_set, क्या वे वही बात हैं?
- 19. std :: pair क्या है?
- 20. Std :: safe_string क्या है?
- 21. std :: this_thread :: उपज() बनाम std :: this_thread :: sleep_for()?
- 22. std :: streampos, std :: streamoff और std :: लंबे समय तक intsize?
- 23. std :: ios_base :: खाया और std :: ios_base :: TRUNC
- 24. std :: बाँध और std :: समारोह सवाल
- 25. std :: forward_list और std :: forward_list :: push_back
- 26. C++ std :: जोड़ी, std :: वेक्टर और memcopy
- 27. पैरामीटर परिभाषाओं के बीच अंतर (प्रकार और नाम), और (प्रकार * नाम) के बीच अंतर क्या हैं?
- 28. पायथन समकक्ष :: std :: set और std :: multimap
- 29. std :: stringstream और std :: ios :: बाइनरी
- 30. std :: seter के लिए std :: inserter के लिए .begin() vs .end() का उपयोग करने के बीच कोई अंतर है?
की जाँच धन्यवाद। यह मुझे पागल बना रहा था। मैं बस इसे नहीं देख सका। –