जावा में आप निम्न विधि है।स्थानीय चर और धागा सुरक्षा
अर्थात्: j == foo(j)
लेकिन यदि आप एक से अधिक थ्रेड फोन foo है, तो आप उस j==foo(j)
गारंटी ले सकते हैं?
मैं हाँ कहूंगा कि इसकी गारंटी है, क्योंकि i
एक स्थानीय चर है, और प्रत्येक धागे का अपना ढेर होता है इसलिए i
प्रत्येक थ्रेड के लिए एक अलग स्मृति स्थान होगा।
मैं कहूंगा कि आप की गारंटी नहीं दे सकता है कि j==foo(j)
अगर i
एक उदाहरण चर रहा है:
private int i;
public int foo(int n) {
i=n;
i = i+1; i = i-1;
return i;
}
क्योंकि धागे बिछा कर सकते और i
का मूल्य विधि क्रियान्वित एक धागा के माध्यम से आधे रास्ते को बदल सकते हैं, या एक धागा i
बढ़ सकता है, लेकिन इसे कम करने का मौका मिलने से पहले, इसके इनपुट के साथ एक और धागा दो बार बढ़ता है और केवल एक बार घटता है।
आपकी धारणाएं सही हैं, लेकिन मैं कुछ और भी डरावना जोड़ूंगा: इस मामले में जहां आप इंस्टेंस वैरिएबल को संशोधित कर रहे हैं, वहां बिल्कुल कोई गारंटी नहीं है कि प्रत्येक थ्रेड के लिए उस क्रम में वृद्धि और कमी आएगी। एक थ्रेड के लिए एक कमी के बाद वृद्धि के बाद यह संभव है, एक और उन्हें विपरीत क्रम में दिखाई देता है। – biziclop
@biziclop मैं कई incremenents या कमी को समझ सकता हूं लेकिन केवल एक कमी देख रहा है और उस क्रम में एक वृद्धि हुई मुझे समझ में नहीं आता? –
नियम यह है कि 'दो परिचालनों के बीच आदेश देने से पहले एक घटना की अनुपस्थिति में, JVM उन्हें पुन: व्यवस्थित करने के लिए स्वतंत्र है क्योंकि यह प्रसन्न होता है। चूंकि संशोधित धागे में चल रहे कोड और कोड को चलाने वाले कोड के बीच ऐसा कोई संबंध नहीं है, किसी भी क्रम में संशोधनों के परिणाम देखने के लिए पर्यवेक्षण धागे के लिए संभव है। – biziclop