Go の同時実行の問題: Minecraft サーバーでの「Golang の致命的なエラー: マップ読み取りとマップ書き込みの同時実行」を解決する
でマップを操作する場合Go ルーチンを同時に実行する場合、「マップ読み取りとマップ書き込みの同時実行」などの致命的なエラーを防ぐために、同時実行の問題に対処することが重要です。このエラーに対する考えられる解決策は次のとおりです:
1.マップ アクセスを sync.RWMutex
で同期する 読み取り操作と書き込み操作を交互に行う限られた使用例の場合は、マップへのアクセスを制御するために sync.RWMutex{} を使用することを検討してください。これは、マップ上でループを実行していない場合に特に便利です。
var ( someMap = map[string]string{} someMapMutex = sync.RWMutex{} ) // Read value from the map someMapMutex.RLock() v, ok := someMap["key"] someMapMutex.RUnlock() // Write value to the map someMapMutex.Lock() someMap["key"] = "value" someMapMutex.Unlock()
2. syncmap.Map
を利用する あるいは、「sync」パッケージの syncmap.Map{} を利用することを検討してください。通常のマップとは異なり、syncmap は内部で同時実行を処理するため、特に反復中の同時アクセスに対して本質的に安全になります。
var ( someMap = syncmap.Map{} ) // Read value from the map v, ok := someMap.Load("key") // Iterate over all keys in a concurrent-safe manner someMap.Range(func(key, value interface{}) bool { val, ok := value.(string) if ok { fmt.Println(key, val) } return true })
追加のヒント:
以上がGo Concurrency で「Golang 致命的エラー: 同時マップ読み取りとマップ書き込み」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。