मैं परमाणु बूलियन ध्वज के रूप में सी ++ std::atomic_flag
का उपयोग कर रहा हूं। ध्वज को सही या गलत पर सेट करना कोई समस्या नहीं है, लेकिन इसे किसी भी मूल्य पर सेट किए बिना ध्वज की वर्तमान स्थिति को कैसे क्वेरी करें? मुझे पता है कि विधियां 'atomic_flag_clear
' और 'atomic_flag_set
' हैं। वे पिछले राज्य को वापस देते हैं लेकिन वर्तमान स्थिति को भी संशोधित करते हैं। फ्लैग स्टेटस को संशोधित किए बिना क्वेरी करने का कोई तरीका है या क्या मुझे पूर्ण 'std::atomic<bool>
' का उपयोग करना है।सी ++ atomic_flag क्वेरी स्थिति
उत्तर
आप इसे के मान को true
पर सेट किए बिना पढ़ नहीं सकते हैं। यह डिजाइन द्वारा है। यह एक बुलियन वैरिएबल नहीं है (हमारे पास std::atomic<bool>
है), लेकिन एक न्यूनतम ध्वज जिसे सी ++ 11 का समर्थन करने वाले सभी आर्किटेक्चर पर लॉक फ्री की गारंटी है।
कुछ प्लेटफार्मों पर केवल परमाणु निर्देश विनिमय निर्देश हैं। ऐसे प्लेटफार्मों पर, std::atomic_flag::test_and_set()
exchange var,1
और clear()
exchange var,0
के साथ कार्यान्वित किया जा सकता है, लेकिन मूल्य पढ़ने के लिए कोई परमाणु निर्देश नहीं है।
तो, यदि आप इसे बदलने के बिना मूल्य को पढ़ना चाहते हैं, तो आपको std::atomic<bool>
की आवश्यकता है।
बस अपनी पुस्तक उद्धृत करना चाहता था .... – haohaolee
क्या होगा यदि मैं केवल डीबगिंग उद्देश्य के लिए अपना मूल्य प्रिंट करना चाहता हूं, तो मुझे वास्तव में परवाह नहीं है कि यह * विशेष * परमाणु परमाणु है? अब मैं इसके लिए '.__ वैल' तत्व का उपयोग करता हूं, लेकिन यह जीसीसी के कुछ संस्करणों में त्रुटि देता है (सही मायने में मुझे लगता है) – user1273684
आप बिना किसी उद्देश्य के किसी भी उद्देश्य के लिए 'std :: atomic_flag' के मान को वैध रूप से पढ़ नहीं सकते यह। यदि आप इसे पढ़ना चाहते हैं (यहां तक कि printf डिबगिंग के लिए), तो आपको 'std :: atomic
आप atomic_flag
उपयोग करने के लिए निर्धारित करने के लिए एक धागा बाहर निकलने चाहिए चाहते हैं, आप इसे इस तरह कर सकते हैं:
प्रारंभ:
std::atomic_flag keep_running = ATOMIC_FLAG_INIT;
keep_running.test_and_set();
थ्रेड पाश:
while (keep_running.test_and_set()) {
// do thread stuff
}
जब आप थ्रेड से बाहर निकलना चाहते हैं:
keep_running.clear();
- 1. एसक्यूएल क्वेरी - गिनती स्थिति
- 2. मोंगोडीबी क्वेरी 'या' स्थिति
- 3. यदि SQL क्वेरी में स्थिति
- 4. LINQ - पहले इस्तेमाल और सिद्ध क्वेरी स्थिति
- 5. Django क्वेरी का उपयोग कर स्थिति
- 6. सी या सी ++ वापसी स्थिति
- 7. एक स्ट्रिंग स्थिति (सी #)
- 8. सी # एक्सएनए माउस स्थिति
- 9. सी # LINQ क्वेरी -
- 10. अनियंत्रित बिट स्थिति और सी #
- 11. सी ++ क्यूटी: वर्तमान स्थिति QStateMachine
- 12. स्थिति
- 13. किस स्थिति में ROWNUM = 1 में "मौजूद" सिले क्वेरी
- 14. स्थिति खाली परिणाम के साथ क्वेरी के लिए
- 15. एक चयन क्वेरी का उपयोग कर mysql प्रतिकृति स्थिति
- 16. MySQL क्वेरी: 'init' स्थिति में लंबे समय तक बिताया
- 17. यूनियन सभी बनाम या एसक्यूएल सर्वर क्वेरी में स्थिति
- 18. ओडाटा क्वेरी $ फ़िल्टर की स्थिति और केस-सेंसिटीविटी
- 19. PHP MySQL सी खोज क्वेरी
- 20. प्रक्रिया की स्थिति की स्थिति
- 21. एंड्रॉइड SQLite: कौन सी क्वेरी ("क्वेरी" या "rawQuery") तेज है?
- 22. एलडीएपी क्वेरी
- 23. सी #/डब्ल्यूपीएफ - स्क्रॉलव्यूयर स्क्रॉल स्थिति प्राप्त करें?
- 24. सी ++ ज्ञात स्थिति पर वेक्टर में डालें
- 25. सी # पीडीएफ दस्तावेज में तीव्र स्थिति
- 26. सी # PrintDocument और प्रिंटर की स्थिति
- 27. सी # थ्रेडिंग: एक रेस स्थिति उदाहरण
- 28. सी ++ में श्रेणियों की स्थिति क्या है?
- 29. सी # .NET में टैबपेज स्थिति कैसे बदलें?
- 30. ऑब्जेक्टिव-सी आईएफ स्टेटमेंट या स्थिति
ऐसा प्रतीत होता है कि इसका एकमात्र उपयोग लॉक प्राप्त करने का साधन होना है। आप एक 'std :: atomic_flag' का उपयोग लॉक के रूप में कर सकते हैं जिसे आप किसी साझा संसाधन तक पहुंचने से पहले हासिल कर सकते हैं, लेकिन यदि साझा संसाधन केवल' बूल 'है, जैसा आपने कहा था, तो आप अभी भी 'std :: परमाणु का उपयोग कर सकते हैं '। _Edit: _ या बल्कि std :: atomic_bool, यह देखकर कि वे आपके लिए एक विशेषज्ञ की परेशानी के लिए कैसे गए हैं! –
Rook
आप वर्तमान स्थिति को तब तक नहीं जानते जब तक कि आप सही अधिग्रहण/रिलीज सेमेन्टिक्स का उपयोग नहीं करते हैं (यानी इसे 'atomic_flag_set' के साथ लॉक करने का प्रयास करें, और फिर केवल तभी सामान करें जब आपने वास्तव में मूल्य बदल दिया हो)। बस इसे पढ़ना केवल आपको बताएगा कि जब आप इसे पढ़ते हैं तो मूल्य क्या था, और यह तुरंत बाद में बदल सकता है। –
@ माइक: क्या वास्तव में यह मायने रखता है? लगता है कि सभी ओपी चाहता है कि एक परमाणु पढ़ने की क्षमता है और आदेशित पढ़ने और लिखने की कुछ धारणा है। – Rook