मैं निम्नलिखित कोड (from a Ruby tutorial) है। मेरे कंप्यूटर पर, परिणाम ट्यूटोरियल से काफी अलग हैं। join
कॉल करने के बाद, मायने रखता है कभी कभी बराबर हैं:लूप्स
count1 : 5321211
count2 : 6812638
difference : 0
count1 : 27307724
count2 : 27307724
difference : 0
और कभी कभी नहीं:
count1 : 4456390
count2 : 5981589
difference : 0
count1 : 25887977
count2 : 28204117
difference : 0
मुझे समझ नहीं आता कि यह कैसे संभव है कि अंतर अभी भी 0
है भले ही मायने रखता है बहुत अलग दिखाने संख्या।
add
आपरेशन शायद इस तरह दिखता है:
val = fetch_current(count1)
add 1 to val
store val back into count1
और count2
के लिए कुछ इसी तरह। रूबी धागे के बीच निष्पादन स्विच कर सकता है, इसलिए हो सकता है कि यह एक चर को लिखना समाप्त न हो, लेकिन जब सीपीयू थ्रेड पर वापस आ जाए, तो उसे उस रेखा से जारी रखना चाहिए जहां इसे बाधित किया गया था, है ना?
और अभी भी एक धागा है जो चर में लिख रहा है। यह कैसे संभव है कि loop do
ब्लॉक के अंदर, count2 += 1
अधिक बार निष्पादित किया गया है?
'जुड़ने (2)' क्या करना चाहिए? – uday
यह थ्रेड को समाप्त करने के लिए एक सीमा (सेकेंड में) देता है। अगर मैं इसे कॉल नहीं करूंगा, तो कार्यक्रम के अंत तक पहुंचने पर रूबी स्वचालित रूप से थ्रेड काट देगा (इसलिए अनंत 'लूप डू हमेशा समाप्त होगा)। अधिक जानकारी के लिए http://www.ruby-doc.org/core-1.9.3/Thread.html#method-i-join देखें – Tombart
यह दिलचस्प है। रूबी 1.8 पर 'अंतर' हमेशा <> 0 होता है, और गणना 1 से अधिक से भिन्न नहीं होती है, लेकिन रूबी 1.9 पर 'अंतर' हमेशा == 0 होती है लेकिन count1 और count2 एक-दूसरे से अलग होती हैं। – Casper