ios - Should I use 'volatile' together with '__block' qualifier when a block is executed on another thread? -


कोड के इस टुकड़े को देखते हैं:

  - (शून्य) addOperationAndWait: (शून्य (^) ()) ऑपरेशन {__block एनएसई एक्सप्शन * अपवाद = शून्य; [आत्म। जोड़ें जोड़ऑपरेशन विथब्लॉकः ^ {@try {ऑपरेशन (); } @ सीच (एनएसई एक्सपैशन * पूर्व) {exception = ex; }}]; [स्वयं। प्रतीक्षा करेंपरी तक सभी ऑपरेन्सअनिश्चित]; अगर (अपवाद) {@throw अपवाद; }}  

कोड की ये लाइनें एक थ्रेड पर निष्पादित होती हैं:

  __block एनएसई एक्सप्शन * exception = noil; अगर (अपवाद) {@throw अपवाद; }  

और कोड की यह पंक्ति दूसरे थ्रेड पर निष्पादित होती है:

  exception = ex;  

तो मुझे अपवाद वैरिएबल को volatile घोषित करना चाहिए कि चर का मान थ्रेड का उपयोग करके कैश नहीं किया जाता है यह?

मुझे इस दस्तावेज के कारण संदेह है:

वाष्पशील चर एक दूसरे प्रकार की स्मृति बाधा को अलग-अलग चर में लागू करते हैं संकलक अक्सर रजिस्टरों में चर के लिए मान लोड करके कोड का अनुकूलन करता है। स्थानीय चर के लिए, यह आमतौर पर कोई समस्या नहीं है यदि वेरिएबल दूसरे धागा से दिखाई दे रहा है, तो इस तरह के एक अनुकूलन दूसरे धागे को इसके किसी भी बदलाव को देखने से रोक सकता है। एक परिवर्तनीय खोजशब्द को एक चर वाली शक्तियों को लागू करने से कम्पाइलर उस चर को स्मृति से लोड करने के लिए हर बार उपयोग किया जाता है। यदि आप किसी वैरिएबल को वाष्पशील घोषित कर सकते हैं, यदि किसी भी समय किसी बाहरी स्रोत से कंपाइलर का पता लगाने में सक्षम नहीं हो, तो इसका मान बदला जा सकता है

>

अस्थिर बहु-पिरोया पहुँच के लिए एक वैरिएबल सभी में मदद नहीं करता है परमाणु संचालन का उपयोग करें, या एक परमाणु संपत्ति का उपयोग करें


Comments

Popular posts from this blog

Active Directory Authenticated Proxy Server with Squid or CNTLM -

java - Can't add JTree to JPanel of a JInternalFrame -

c - The joining operator ";" in my shell isn't working properly -