c# - Is an atomic operation enough -


<पूर्व> वर्ग रोको {निजी बूल स्टॉप; शून्य लूप () {while (! Stop) {// work}} शून्य रोक () {stop = true; }}

असल में, यदि लूप पद्धति एक थ्रेड में चल रही है और स्टॉप को दूसरे से कहा जाता है तो क्या ऑपरेशन ठीक से बंद हो जाएगा? मैं समझता हूं कि बूल पढ़ना / लिखना परमाणु है। लेकिन, क्या यह पर्याप्त है? अगर धागा पाश तुरंत बंद नहीं हो जाता है तो परेशानी होती है। क्या मुझे अस्थिर रोकना चाहिए?

हां, आपको निश्चित रूप से stop को चिह्नित करना चाहिए अस्थिरता।

परमाणु पर्याप्त नहीं है - यह गारंटी नहीं देता है कि एक धागा कभी किसी दूसरे द्वारा किए गए परिवर्तनों को "देखना" होगा।

जबकि अस्थिर < / कोड> वर्तमान में कुछ सर्जरी के दौर से गुजर रहा है, आप मोटे तौर पर एक वाष्पशील चर के लिए एक लिखने के बारे में सोच सकते हैं "सुनिश्चित करें कि दूसरों को यह तुरंत देख सकते हैं!" और अस्थिर वैरिएबल से पढ़ा जाता है, जैसा कि "मैं नवीनतम मान देखना चाहता हूं!"

बिना stop अस्थिर बनाने के बिना, यह लूप हमेशा के लिए जा सकता है, भले ही रोकें () एक अलग थ्रेड में कहा जाता है असल में जेआईटी काफी वैसी को एक रजिस्टर में पढ़ सकता था और फिर हमेशा से रजिस्टर से पढ़ता था।

वास्तव में, अगर "काम" में कभी भी गैर-इनलाइन तरीके से कॉल करने की ज़रूरत नहीं होती है, तो मेरा मानना ​​है कि वर्तमान में जेआईटी वैसे भी एक वाष्पशील पढ़ने के लिए मजबूर है, लेकिन यह सिर्फ एक वर्तमान व्यावहारिक सीमा है ... सिद्धांत कहता है कि आपको इसे अस्थिर करना चाहिए।


Comments

Popular posts from this blog

email - PHP mail error ... failed to open stream : permission denied -

c# - ListView onScroll event -

c - Linux mmap() error -