我为一个创建 4 个 goroutine 的程序运行了以下代码,根据我得到的输出,我的代码似乎运行正常,但它给出了错误:-fatal error: all goroutines are asleep - deadlock!
我添加了 4 个 WaitGroups,并且随着每个 goroutine 的完成,我执行了 wg.Done(),但我仍然不明白为什么会发生这样的错误。
我的代码:
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func sort(x []int) {
fmt.Println("Initial: ", x)
var i int
var j int
for i = 0; i < len(x); i++ {
for j = 0; j < len(x)-i-1; j++ {
if x[j] > x[j+1] {
temp := x[j+1]
x[j+1] = x[j]
x[j] = temp
}
}
}
fmt.Println("Sorted: ", x)
wg.Done()
}
func main() {
fmt.Println("Enter an array of number preferrably in multiples of 4:- ")
inputSlice := make([]int, 0, 1)
for true {
var n int
fmt.Print("Enter the number: ")
fmt.Scan(&n)
inputSlice = append(inputSlice, n)
fmt.Print("Do you want to continue adding numbers (y/n) ? ")
var char string
fmt.Scan(&char)
if char == "n" || char == "N" {
if len(inputSlice)%4 == 0 {
break
} else {
fmt.Println("Please enter more ", 4-len(inputSlice)%4, " numbers")
}
}
fmt.Println("Test: ", n)
fmt.Println("Input: ", char)
}
fmt.Println("Initial: ", inputSlice)
size := len(inputSlice)
wg.Add(4)
div := (size / 4)
sort1 := inputSlice[:div]
go sort(sort1)
sort2 := inputSlice[div:(div * 2)]
go sort(sort2)
sort3 := inputSlice[(div * 2):(div * 3)]
go sort(sort3)
sort4 := inputSlice[(div * 3):]
go sort(sort4)
wg.Wait()
final := make([]int, 0, 1)
for _, val := range sort1 {
final = append(final, val)
}
for _, val := range sort2 {
final = append(final, val)
}
for _, val := range sort3 {
final = append(final, val)
}
for _, val := range sort4 {
final = append(final, val)
}
sort(final)
fmt.Println("Sorted: ", final)
}
忽然笑
catspeake
相关分类