std :: atomic C++ 11 द्वारा पेश की गई नई सुविधा का उपयोग कैसे करें, लेकिन मुझे इसका सही तरीके से उपयोग करने के तरीके पर अधिक ट्यूटोरियल नहीं मिल रहा है। तो क्या निम्न अभ्यास सामान्य और कुशल हैं?std :: atomic कुशलतापूर्वक
एक अभ्यास मैं प्रयोग किया जाता है कि हम एक बफर है और मैं कुछ बाइट्स पर कैस करना चाहते हैं, तो क्या मैंने किया था:
uint8_t *buf = ....
auto ptr = reinterpret_cast<std::atomic<uint8_t>*>(&buf[index]);
uint8_t oldValue, newValue;
do {
oldValue = ptr->load();
// Do some computation and calculate the newValue;
newValue = f(oldValue);
} while (!ptr->compare_exchange_strong(oldValue, newValue));
तो मेरी प्रश्न हैं:
- उपरोक्त कोड का उपयोग करता है बदसूरत reinterpret_cast और यह & buf [index] स्थान के संदर्भ में परमाणु सूचक को पुनर्प्राप्त करने का सही तरीका है?
- क्या सीएएस एक मशीन शब्द पर सीएएस की तुलना में काफी धीमी है, तो मुझे इसका उपयोग करने से बचना चाहिए? मेरा कोड अधिक जटिल दिखाई देगा यदि मैं इसे एक शब्द लोड करने, बाइट निकालने, गणना करने और बाइट को नए मान में सेट करने के लिए बदलता हूं, और सीएएस करता हूं। इससे कोड अधिक जटिल हो जाता है और मुझे खुद को एड्रेस संरेखण से निपटने की भी आवश्यकता होती है।
संपादित करें: यदि वे प्रश्न प्रोसेसर/आर्किटेक्चर निर्भर हैं, तो x86/x64 प्रोसेसर के लिए निष्कर्ष क्या है?
सी ++ कार्रवाई में Concurrency [(प्रारंभिक पहुंच)] (http://www.manning.com/williams/), [(अमेज़ॅन)] (http://www.amazon.com/gp/product/1933988770/ रेफरी = as_li_qf_sp_asin_tl?यानी = यूटीएफ 8 और टैग = गुमाडून -20 और लिंककोड = एएस 2 और शिविर = 1789 और रचनात्मक = 9 325 और क्रिएटिवएएसआईएन = 1 9 33 9 88770) शायद इस विषय पर शायद सबसे अच्छी किताब है, या बल्कि, होगी। – Cubbi
परमाणुओं पर कई ट्यूटोरियल नहीं हैं क्योंकि, परमाणु झंडे जैसे कुछ साधारण मामलों के अलावा, यह एक खनन क्षेत्र है। "द हर्ट लॉकर" देखना परमाणुओं का उपयोग करने के लिए एक शर्त होना चाहिए। ताले का प्रयोग करें! –