Tôi đang cố hiểu đồng thời trong Go. Đặc biệt, tôi đã viết thread-an toàn này chương trình:Tìm hiểu về goroutines
package main
import "fmt"
var x = 1
func inc_x() { //test
for {
x += 1
}
}
func main() {
go inc_x()
for {
fmt.Println(x)
}
}
tôi nhận ra rằng tôi nên sử dụng các kênh truyền hình để ngăn chặn tình trạng đua với x
, nhưng đó không phải là điểm ở đây. Chương trình in 1
và sau đó dường như lặp mãi mãi (không in thêm bất kỳ thứ gì). Tôi mong đợi nó in một danh sách vô hạn các số, có thể bỏ qua một số và lặp lại những người khác do điều kiện chủng tộc (hoặc tệ hơn - in số trong khi nó đang được cập nhật trong inc_x
).
Câu hỏi của tôi là: Tại sao chương trình chỉ in một dòng?
Chỉ cần rõ ràng: Tôi không sử dụng kênh nhằm mục đích cho ví dụ về đồ chơi này.
Chỉ cần nghĩ rằng tôi muốn đề cập rằng kể từ Go 1.2, lịch trình có thể được gọi vào chức năng nhập định kỳ. Nó sẽ giải quyết trường hợp này tôi không nghĩ, nhưng nó giúp khi bạn có một vòng lặp chặt chẽ gọi một chức năng không được gạch chân. –