Warum wird in diesem Code kein Deadlock-Fehler zurückgegeben?
Der bereitgestellte Code importiert das Net/http-Paket, das ausgeführte Goroutinen initialisiert Hintergrundabfrage. Dadurch wird versehentlich der Deadlock-Detektor deaktiviert und verhindert, dass der erwartete Deadlock-Fehler zurückgegeben wird.
Um dieses Verhalten zu verstehen, betrachten Sie den Codeauszug:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch In diesem Fall erstellt die Hauptfunktion einen Kanal und sendet einen Wert hinein, was möglicherweise einen Deadlock verursacht. Da jedoch das Paket „net/http“ importiert wurde, ist der Deadlock-Detektor deaktiviert und es wird kein Fehler zurückgegeben.
Wenn der Import entfernt wird:
package main
import "fmt"
func main() {
var ch = make(chan int)
ch Der Deadlock-Fehler wird jetzt korrekt zurückgegeben, da die Hintergrundabfrage-Goroutinen nicht aktiv sind.
Dieses Verhalten steht im Einklang mit der Diskussion im GitHub-Problem: https://github.com/golang /go/issues/12734, wo erklärt wird, dass der Import des net/http-Pakets den Deadlock-Detektor deaktiviert.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3