このコードではデッドロック エラーが返されないのはなぜですか?
提供されたコードは net/http パッケージをインポートし、実行するゴルーチンを初期化します。バックグラウンドポーリング。これにより、デッドロック検出機能が誤って無効になり、予想されるデッドロック エラーが返されなくなります。
この動作を理解するには、コードの抜粋を検討してください。
<code class="go">package main import ( "fmt" "net/http" ) func main() { var ch = make(chan int) ch <- 1 }</code>
この場合、main 関数はチャネルにアクセスして値を送信すると、デッドロックが発生する可能性があります。ただし、net/http パッケージがインポートされているため、デッドロック検出機能は無効になり、エラーは返されません。
インポートが削除された場合:
<code class="go">package main import "fmt" func main() { var ch = make(chan int) ch <- 1 }</code>
デッドロック エラーは正しく表示されるようになりました。バックグラウンド ポーリングのゴルーチンがアクティブでないために返されました。
この動作は、GitHub の問題 https://github.com/golang/go/issues/12734 の議論と一致しています。そこでは、インポートがnet/http パッケージはデッドロック検出機能を無効にします。
以上がNet/Http パッケージをインポートするときにデッドロック検出が無効になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。