병렬 goroutines를 사용하여 복잡한 프로그램을 작성하려고합니다. 그것은 채널이있는 첫 번째 프로그램입니다;) 각 goroutine은 배열을 반환하지만 불행히도 결과는 "임의"입니다. 10 시간 동안 프로그램을 실행하면 10 가지 결과가 나옵니다. (배열 채널을 공유하는 골 루터 : 데이터 경주 해결 시도
이것은 내 프로그램이 지나치게 단순하므로 결과가 좋습니다 (너무 간단하기 때문에).하지만 -race 인수를 사용하여 실행하면, 4 개 데이터 종족이있다.
내가 가까운() 함수를 가지고 시도했지만이 일을하지 않았다.당신이 날은 실수를 찾기 위해 도와 드릴까요? 대단히 사전에 감사합니다!
package main
import "fmt"
import "sync"
import "strconv"
func cat_strings(a int, b string) []string{
var y []string
j := strconv.Itoa(a)
y = append(y, j)
y = append(y, b)
return y
}
func main() {
var slice []string
var wg sync.WaitGroup
var x []string
queue := make(chan []string, 10)
wg.Add(10)
for i := 0; i < 10; i++ {
go func(i int) {
defer wg.Done()
x = cat_strings(i, "var")
queue <- x
}(i)
}
//close(queue)
go func() {
defer wg.Done()
for t := range queue {
slice = append(slice, t...)
}
}()
wg.Wait()
fmt.Println(slice)
}
채널에 정의되지 않은 순서로 10 가지를 넣으므로 여기에서 무슨 일이 일어날 지 확신하지 못합니까? – ams