मेरे साझा डेटा संरचना की सुरक्षा के लिए लॉक का उपयोग करने के बारे में मेरे कुछ प्रश्न हैं। मैं उपयोग कर रहा हूँ C/C++/ObjC/ObjC++मल्टीथ्रेडिंग: क्या मुझे अपने चर को केवल-पढ़ने की विधि में सुरक्षित रखने की आवश्यकता है?
उदाहरण के लिए मैं एक काउंटर वर्ग है जो बहु-धागा वातावरण में प्रयुक्त है
class MyCounter {
private:
int counter;
std::mutex m;
public:
int getCount() const {
return counter;
}
void increase() {
std::lock_guard<std::mutex> lk(m);
counter++;
}
};
मैं
getCount()
विधि मेंstd::lock_guard<std::mutex> lk(m);
उपयोग करने के लिए इसे बनाने के लिए की जरूरत है सुरक्षित धागा?क्या होता है यदि केवल दो धागे हैं: एक पाठक धागा और एक लेखक धागा तो क्या मुझे इसे सुरक्षित रखना होगा? क्योंकि केवल एक धागा चर को संशोधित कर रहा है, इसलिए मुझे लगता है कि कोई खोया अपडेट नहीं होगा।
कई एक साझा आदिम प्रकार चर के लिए लेखक/पाठक नहीं हैं, तो (जैसे
int
) क्या आपदा अगर मैं केवल लिखने विधि में बंद है, लेकिन विधि पढ़ा नहीं हो सकता है? 8 बिट्स प्रकार 64 बिट्स प्रकार की तुलना में कोई अंतर करेगा?क्या कोई आदिम प्रकार डिफ़ॉल्ट रूप से परमाणु है? उदाहरण के लिए
char
पर लिखें हमेशा परमाणु है? (मैं जानता हूँ कि यह जावा में सच है लेकिन सी के बारे में ++ पता नहीं है और मैं मैक पर LLVM संकलक का उपयोग कर रहा है, तो मंच मामलों)
"C/C++/ObjC/ObjC++" ये सब पूरी तरह से अलग अलग भाषाओं (एमएस C++ के लिए उपलब्ध)। एक चुनें; ऐसा लगता है कि आपने सी ++ चुना है। – GManNickG
मैं बैकएंड और ओबीजेसी ++ के लिए जीयूआई और सी ++ के लिए ओबीजेसी का उपयोग कर रहा हूं ताकि उन्हें गठबंधन किया जा सके। ओबीजेसी ++ दूसरों के सुपरसेट भी है। उदाहरण के तौर पर मैं बस सी ++ चुनता हूं। –
यह अच्छा है, लेकिन उन्हें एक सूची में एक साथ संयोजित न करें। :) बस कहें कि आप चार अलग-अलग भाषाओं में एक उत्तर में रूचि रखते हैं। – GManNickG