ホームページ  >  記事  >  バックエンド開発  >  Net/Http パッケージをインポートするときにデッドロック検出が無効になるのはなぜですか?

Net/Http パッケージをインポートするときにデッドロック検出が無効になるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 09:42:30615ブラウズ

Why is Deadlock Detection Disabled When Importing the Net/Http Package?

このコードではデッドロック エラーが返されないのはなぜですか?

提供されたコードは 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。