このコードではデッドロック エラーが返されないのはなぜですか?
提供されたコードは net/http パッケージをインポートし、実行するゴルーチンを初期化します。バックグラウンドポーリング。これにより、デッドロック検出機能が誤って無効になり、予想されるデッドロック エラーが返されなくなります。
この動作を理解するには、コードの抜粋を検討してください:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch この場合、main 関数はチャネルを作成し、そこに値を送信するため、デッドロックが発生する可能性があります。ただし、net/http パッケージがインポートされているため、デッドロック検出機能は無効になり、エラーは返されません。
インポートが削除された場合:
package main
import "fmt"
func main() {
var ch = make(chan int)
ch バックグラウンド ポーリングのゴルーチンがアクティブではないため、デッドロック エラーが正しく返されるようになりました。
この動作は、GitHub の問題の議論と一致しています: https://github.com/golang /go/issues/12734 では、net/http パッケージをインポートするとデッドロック検出機能が無効になることが説明されています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3