इसलिए मेरे पास एक मल्टीप्रोसेसर मशीन पर सी ++ में बूलियन प्रकार है। परिवर्तनीय जीवन को सत्य के रूप में शुरू करता है, और उसके बाद कुछ धागे होते हैं, जिनमें से कोई एक या अधिक इसे गलत होने के लिए लिख सकता है।क्या मुझे इस चर को लॉक से बचाने की ज़रूरत है?
साथ ही, ये थ्रेड भी इस स्थिति को अपने राज्य की जांच के लिए पढ़ सकते हैं। मुझे कोई परवाह नहीं है कि इस चर को पढ़ने से किसी भी लेखन के साथ सिंक्रनाइज़ किया जाता है, वे प्रत्येक कोड में विभिन्न स्थानों पर होते हैं, और इससे कोई फर्क नहीं पड़ता कि यह किसी विशेष लेखन से पहले या बाद में आता है। अब, क्या मुझे इस बुलियन के लिए ताला चाहिए?
एकमात्र तरीका मुझे लॉक की आवश्यकता होगी यदि बहुत कम स्तर पर, स्मृति दो प्रतिस्पर्धी लेखनों से दूषित हो सकती है। यदि, उदाहरण के लिए, प्रोसेसर ए पर एक असेंबली निर्देश बाइट को 0 लिख रहा है जो एक ही समय में बूलियन का प्रतिनिधित्व करता है क्योंकि प्रोसेसर बी वही कर रहा है ... और 0 लिखने के बजाय, स्मृति 22 या उसके साथ समाप्त होती है या कुछ कुछ। वह कुछ गड़बड़ कर सकता है।
तो, आम तौर पर, अगर proc ए स्मृति स्थान पर 3 लिख रहा है, जबकि proc B 7 लिख रहा है, सिंक्रनाइज़ेशन के साथ, क्या मुझे कम से कम 3 या 7 के साथ समाप्त होने की गारंटी है? या क्या स्मृति को तोड़ना इतना आसान है?
संपादित करें:
टिप्पणियों के लिए धन्यवाद। कुछ और जानकारी: पाठ्यक्रम के कार्यक्रम में सिंक्रनाइज़ेशन है। संक्षेप में, प्रश्न में ध्वज बता रहा है कि क्या एक निश्चित मेमोरी पूल "गंदे" है (इसे संकलित करने की आवश्यकता है)। इसलिए कोई भी धागा इस झंडे को झूठा सेट करने का फैसला कर सकता है (जिसका मतलब पूल गंदे है)। उदाहरण के लिए, पूल से स्मृति मुक्त करने से यह गंदा हो जाता है। कोई भी थ्रेड तब भी इस ध्वज को पढ़ सकता है और सिग्नल करने के लिए एक और झंडा सेट कर सकता है कि क्लीन-अप की आवश्यकता होती है - पूल से मेमोरी आवंटित होने पर यह चेक किया जाता है, अगर हम स्मृति पर कम होते हैं तो क्लीन-अप संकेत दिया जाता है। पुनरावृत्ति के बीच मेरे मास्टर महत्वपूर्ण खंड में कहीं भी, जहां प्रत्येक धागा प्रक्रिया के लिए अधिक डेटा देखने के लिए जाता है, मेरे पास थ्रेड इस दूसरे ध्वज की जांच करेंगे, और यह सुनिश्चित करने के लिए कुछ उचित करें कि: अन्य सभी पैर अपने वर्तमान पुनरावृत्ति को समाप्त करते हैं, एक धागा स्मृति को साफ करता है, पहला ध्वज वापस सत्य पर सेट करता है (जैसा कि पूल में गंदे नहीं है), दूसरा ध्वज वापस झूठी सेट करता है, और फिर सभी धागे को फिर से जारी करता है।
इसलिए मुझे नहीं लगता कि मुझे लॉक की आवश्यकता है क्योंकि: एक ताला यह सुनिश्चित करेगा कि एक ही समय में लिखना एक और लिखना या पढ़ना न हो। लेकिन कौन परवाह करता है, जब तक हार्डवेयर मुझे विफल नहीं करता है, तब तक सबसे खराब स्थिति-परिदृश्य यह है कि पढ़ना पहले या बाद में यादृच्छिक रूप से होता है - यह वही बात है जो तब होगा जब मैंने इसे लॉक से संरक्षित किया हो, बस तब हम वास्तव में सुनिश्चित करें कि यह पहले या बाद में आया था ...
मुझे लगता है कि ऊपर वर्णित दूसरे ध्वज पर एक ही तर्क लागू होता है।
ब्याज से, आप पढ़ने के बारे में परवाह क्यों नहीं करते? मान लीजिए कि कुछ धागे ने झूठ लिखा है - तो अगर आपको परवाह नहीं है कि पढ़ने के परिणाम 'सत्य' या 'झूठी' में हैं, तो पढ़ने को परेशान क्यों करें? क्या यह सिर्फ "गलत" 'सत्य 'पढ़ता है हानिकारक है? –