es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

error fatal: todas las goroutines están dormidas – ¡bloqueo! , Estoy obteniendo este error

Estoy recibiendo este error en la función “FindPathConcurently”. Como soy nuevo en Go, intento entenderlo pero no puedo, cualquier ayuda sería muy apreciada. Estoy tratando de resolver un problema donde estoy escribiendo código para resolver un laberinto. Node es simplemente una structura con next y value.

func FindExitConcurrently(root []*Node, paths chan []string, path []string, index int) {
    for _, node := range root {
        if node.Value == consts.SUCCESS {
            paths <- path
            return
        }
        if node.Next == nil {
            path = nil
            return
        }
        path = append(path, node.Value)
        index++
        FindExitConcurrently(node.Next, paths, path, index)
        path = nil
        index--
    }
    if index == 0 {
        close(paths)
    }
}

func FindPathConcurrently(parentNode *Node) {
    var pathChannels []chan []string
    for key, value := range parentNode.Next {
        pathChannels = append(pathChannels, make(chan []string))
        go FindExitConcurrently(value.Next, pathChannels[key], nil, 0)
    }
    cases := make([]reflect.SelectCase, len(pathChannels))
    for i, ch := range pathChannels {
        cases[i] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(ch)}
    }
    remaining := len(cases)
    for remaining > 0 {
        chosen, value, ok := reflect.Select(cases)
        if !ok {
            // El canal elegido ha sido cerrado, por lo tanto, anulamos el caso estableciendo el canal en nil
            cases[chosen].Chan = reflect.ValueOf(nil)
            remaining -= 1
            continue
        }
        //fmt.Printf("Leído desde el canal %#v y recibido %s\n", pathChannels[chosen], value.String())
        fmt.Println(value)
    }
}

I am sorry but i can’t translate the code and output as it is not provided in the markdown.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error no se proporciona en la pregunta. No está claro cuál es el problema sin el mensaje de error. El código parece estar intentando resolver un laberinto utilizando concurrencia.

    Crea múltiples canales para recibir caminos y lanza múltiples funciones concurrentes “FindExitConcurrently” para buscar la salida en cada ruta. Luego utiliza la reflexión para seleccionar de los canales e imprimir los caminos recibidos.

    Sin el mensaje de error, es difícil proporcionar una mayor asistencia.

Comments are closed.