की थ्रेड सुरक्षा मैं थ्रेड सुरक्षा की अवधारणा को समझता हूं। एक एकल चर की रक्षा करने की कोशिश करते समय मैं थ्रेड सुरक्षा को सरल बनाने के लिए सलाह की तलाश में हूं।एक परिवर्तनीय
मैं एक चर राशि कहते हैं:
double aPass;
और मैं इस चर की रक्षा करना चाहते हैं, तो मैं एक म्युटेक्स बनाएँ:
pthread_mutex_t aPass_lock;
अब दो अच्छा तरीके मैं ऐसा करने के बारे में सोच सकते हैं लेकिन वे दोनों को परेशान नुकसान है। पहले चर धारण करने के लिए एक धागा सुरक्षित वर्ग बनाने के लिए है:
class aPass {
public:
aPass() {
pthread_mutex_init(&aPass_lock, NULL);
aPass_ = 0;
}
void get(double & setMe) {
pthread_mutex_lock(aPass_lock);
setMe = aPass_
pthread_mutex_unlock(aPass_lock);
}
void set(const double setThis) {
pthread_mutex_lock(aPass_lock);
aPass_ = setThis;
pthread_mutex_unlock(aPass_lock);
}
private:
double aPass_;
pthread_mutex_t aPass_lock;
};
अब इस उसे स्पर्श करें, याय रखेंगे aPass
पूरी तरह से सुरक्षित है, कुछ भी गलत हो सकता है और कभी! हालांकि उस गड़बड़ी को देखो और इसे एक्सेस करते समय भ्रम की कल्पना करें। कुल।
दूसरा तरीका यह है कि आप दोनों को सुलभ रखें और यह सुनिश्चित करने के लिए कि आप एक पैस का उपयोग करने से पहले म्यूटेक्स को लॉक करें।
pthread_mutex_lock(aPass_lock);
do something with aPass
pthread_mutex_unlock(aPass_lock);
लेकिन क्या कोई नई परियोजना, क्या हुआ अगर आप एक समय यह लॉक करने के लिए भूल जाते हैं पर आता है। मुझे डीबगिंग थ्रेड समस्याओं को पसंद नहीं है जो वे कठिन हैं।
क्या कोई अच्छा तरीका है (pthreads का उपयोग करना क्योंकि मुझे क्यूएनएक्स का उपयोग करना है जिसमें थोड़ा बढ़ावा समर्थन है) एक बड़े वर्ग की आवश्यकता के बिना एकल चर को लॉक करने के लिए और यह सुरक्षित है तो बस इसके साथ जाने के लिए एक म्यूटेक्स लॉक बनाना?
यह चर वैश्विक चर है? मुझे नहीं लगता कि आपके पास बहुत अधिक विकल्प है .. जब तक कि आप एक सामान्य थ्रेड सुरक्षित कंटेनर क्लास बनाना नहीं चाहते हैं - यह आपको कुछ कोड बचाएगा यदि आपको इसे दूसरे var में करना है। –
क्या आप एक टेम्पलेट वर्ग की तरह मतलब है? यह बहुत अच्छा लगता है। –
भी, क्या आपके डिजाइन द्वारा var को डुप्लिकेट करना संभव नहीं है? एपस एक वर्ग है इसलिए मुझे कई ऑब्जेक्ट्स मिल सकती हैं क्योंकि मुझे –