मैं गो में सहमति को समझने की कोशिश कर रहा हूं।गोरोटाइन्स को समझना
package main
import "fmt"
var x = 1
func inc_x() { //test
for {
x += 1
}
}
func main() {
go inc_x()
for {
fmt.Println(x)
}
}
मैं स्वीकार करते हैं कि मैं x
साथ दौड़ की स्थिति को रोकने के लिए चैनल का उपयोग किया जाना चाहिए, लेकिन उस समय यहाँ नहीं है: विशेष रूप से, मैं इस धागे की असुरक्षित कार्यक्रम लिखा था। कार्यक्रम 1
प्रिंट करता है और फिर हमेशा लूप लगता है (कुछ भी प्रिंट किए बिना)। मैं उम्मीद करता हूं कि यह संख्याओं की एक अनंत सूची मुद्रित करे, संभवतः कुछ को छोड़कर और दौड़ की स्थिति के कारण दूसरों को दोहराएं (या बदतर - inc_x
में अपडेट होने पर संख्या को प्रिंट करना)।
मेरा प्रश्न है: प्रोग्राम केवल एक पंक्ति क्यों प्रिंट करता है?
बस स्पष्ट होना: मैं इस खिलौने उदाहरण के लिए उद्देश्य पर चैनलों का उपयोग नहीं कर रहा हूँ।
बस सोचा कि मैं उल्लेख करता हूं कि गो 1.2 के बाद, समय-समय पर फ़ंक्शन एंट्री पर शेड्यूलर लगाया जा सकता है। यह इस मामले को हल करेगा जो मुझे नहीं लगता है, लेकिन यह तब मदद करता है जब आपके पास एक गैर-इनलाइन फ़ंक्शन को कॉल करने वाला तंग लूप होता है। –