并发安全
并发安全也叫线程安全,在并发中出现了数据的丢失,称为并发不安全
map和slice都是并发不安全的
切片并发不安全
场景: 10000个协程同时添加切片
var s []int
func appendValue(i int) {
s = append(s, i)
}
func main() {
for i := 0; i < 10000; i++ {
//10000个协程同时添加切片
go appendValue(i)
}
for i, v := range s {
//同时打印索引和值
fmt.Println(i, ":", v)
}
}
Output:
没有到9999,说明有数据丢失
解决方法: 加锁
var s []int
var lock sync.Mutex //互斥锁
func appendValue(i int)