Files
gf/geg/container/gmap/safe_map_delete.go

40 lines
610 B
Go
Raw Normal View History

package main
import (
2019-04-03 00:03:46 +08:00
"fmt"
"sync"
"time"
)
2018-11-28 20:19:28 +08:00
// 验证 map 的delete方法是否并发安全
func main() {
2019-04-03 00:03:46 +08:00
// 创建一个初始化的map
m := make(map[int]int)
for i := 0; i < 10000; i++ {
m[i] = i
}
2019-04-03 00:03:46 +08:00
fmt.Println("map size:", len(m))
2019-04-03 00:03:46 +08:00
wg := sync.WaitGroup{}
ev := make(chan struct{}, 0)
2019-04-03 00:03:46 +08:00
// 创建10个并发的goroutine使用ev控制并发开始事件更容易模拟data race
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
<-ev
fmt.Println("start")
for i := 0; i < 10000; i++ {
delete(m, i)
}
wg.Done()
}()
}
2019-04-03 00:03:46 +08:00
time.Sleep(time.Second)
2019-04-03 00:03:46 +08:00
close(ev)
wg.Wait()
}