php エディタ Apple は、この記事でよくある質問に答えます: 「これは Go の競合状態ですか?」 並行プログラムを作成する場合、競合状態は次のような一般的な問題です。データの不整合やその他の予期しない結果につながります。 Go 言語では、ミューテックス ロックやチャネルなどのメカニズムを使用して競合状態を回避できます。一緒に話し合ってみましょう!
func main() { m := map[string]int{ "foo": 42, "bar": 1337, } go func() { time.Sleep(1 * time.Second) tmp := map[string]int{ "foo": 44, "bar": 1339, } m = tmp }() for { val := m["foo"] fmt.Println(val) } }
これは多くのパッケージで見られます。
これが競合状態とみなされないのはなぜですか?
go run -race .
エラーはありません。
@volker が指摘したように、これはデータ競争です。また、一度しか書き込まれないため、検出するのは困難です。以下は、データ競合エラーを簡単に引き起こすことができる変更されたデモです:
リーリー以上がこれは Go の競合状態ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。