package main
func main() {
// map 同key并发读
//map1 := map[string]struct{}{"1": {}}
//for j := 1; j <= 2; j++ {
// go func(map1 map[string]struct{}) {
// defer func() {
// if err := recover(); err != nil {
// fmt.Println(err)
// return
// }
// }()
// for i := 1; i <= 1000; i++ {
// fmt.Println(map1["1"])
// }
// }(map1)
//}
// fatal error: all goroutines are asleep - deadlock!
//同key并发写
//map1 := map[string]struct{}{"1": {}}
//for j := 1; j <= 2; j++ {
// go func(map1 map[string]struct{}) {
// defer func() {
// if err := recover(); err != nil {
// fmt.Println(err)
// return
// }
// }()
// for i := 1; i <= 1000; i++ {
// map1["1"] = struct{}{}
// }
// }(map1)
//}
// fatal error: concurrent map writes
// 同key并发读写
//map1 := map[string]struct{}{"1": {}}
//for j := 1; j <= 2; j++ {
// go func(map1 map[string]struct{}) {
// defer func() {
// if err := recover(); err != nil {
// fmt.Println(err)
// return
// }
// }()
// for i := 1; i <= 1000; i++ {
// if i%2 == 0 {
// map1["1"] = struct{}{}
// } else {
// fmt.Println(map1["1"])
// }
// }
// }(map1)
//}
// fatal error: all goroutines are asleep - deadlock!
// 同key非并发读写
//map1 := map[string]struct{}{"1": {}}
//for i := 1; i <= 1000; i++ {
// map1["1"] = struct{}{}
//}
//for i := 1; i <= 1000; i++ {
// fmt.Println(map1["1"])
//}
//for i := 1; i <= 1000; i++ {
// if i%2 == 0 {
// map1["1"] = struct{}{}
// } else {
// fmt.Println(map1["1"])
// }
//}
// 正常
// 不同key非并发读写
//map1 := make(map[string]struct{})
//for i := 1; i <= 1000; i++ {
// map1[fmt.Sprint(i)] = struct{}{}
//}
//for i := 1; i <= 1000; i++ {
// fmt.Println(map1[fmt.Sprint(i)])
//}
//for i := 1; i <= 1000; i++ {
// if i%2 == 0 {
// map1[fmt.Sprint(i)] = struct{}{}
// } else {
// fmt.Println(fmt.Sprint(i))
// }
//}
// 正常
// 不同key并发读写
//map1 := make(map[string]struct{})
//for j := 1; j <= 2; j++ {
// go func(map1 map[string]struct{}) {
// defer func() {
// if err := recover(); err != nil {
// fmt.Println(err)
// return
// }
// }()
// for i := 1; i <= 1000; i++ {
// if i%2 == 0 {
// map1[fmt.Sprint(i)] = struct{}{}
// } else {
// fmt.Println(map1[fmt.Sprint(i)])
// }
// }
// }(map1)
//}
//fatal error: {}
//concurrent map writes{}
//select {}