Вопрос
На изображении выше показан вопрос, решение которого мне необходимо решить.вот решение, которое я придумал (должно быть закодировано в Go).Я получаю ошибку взаимоблокировки:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/home/kypriank/Assignment 5/priorityqueue.go:42 +0x1a3
goroutine 17 [chan send]:
main.priorityQueue(0xc420080060, 0xc4200800c0)
/home/kypriank/Assignment 5/priorityqueue.go:22 +0x1a2
created by main.main
/home/kypriank/Assignment 5/priorityqueue.go:40 +0xe5
exit status 2
Интересно, может ли кто-нибудь помочь мне выяснить, где происходит сбой моего кода (основная функция имеет некоторый код для проверки моего решения):
package main
var numOrder [20] int
var mesOrder [] PriorityMessage
var pri int
var a int
type PriorityMessage struct {
Priority int // between 0 and 9
Message string
}
func priorityQueue(west chan PriorityMessage, east chan string) {
incomming := <-west
if numOrder[incomming.Priority] == 10 {
numOrder[incomming.Priority] = incomming.Priority
}else {numOrder[incomming.Priority+1] = incomming.Priority}
mesOrder = append(mesOrder, incomming)
for i := 0; i < len(numOrder); i++ {if numOrder[i] != 10 {pri =
numOrder[i]; a = i; break}}
for i := 0; i < len(mesOrder); i++ {
if pri == mesOrder[i].Priority {
east <- (mesOrder[i]).Message
numOrder[a] = 10
mesOrder = append(mesOrder[:i], mesOrder[i+1:]...)
}
}
}
var west chan PriorityMessage
var east chan string
func printToScreen() {
for {println(<- east)}
}
func main() {
for i := 0; i < len(numOrder); i++ {numOrder[i] = 10}
west = make(chan PriorityMessage)
east = make(chan string)
go priorityQueue(west, east)
west <- PriorityMessage{1, "one"}
west <- PriorityMessage{0, "zero"}
west <- PriorityMessage{2, "two"}
west <- PriorityMessage{1, "another one"}
west <- PriorityMessage{0, "another zero"}
go printToScreen()
select {} // to allow all messages to be printed
}