package main
import (
"fmt"
"sync"
"time"
)
// 线程安全的map
type SafeMap struct {
safeMap map[string]interface{} // map对象
sync.Mutex // 互斥锁对象
}
// 读方法
func (s *SafeMap) Read(k string) (interface{}, bool) {
s.Lock() // 读的时候上锁
defer s.Unlock() // 读完了释放锁
// 读取并返回读取结果
result, ok := s.safeMap[k]
return result, ok
}
// 写方法
func (s *SafeMap) Write(k string, v interface{}) {
s.Lock() // 写的时候上锁
defer s.Unlock() // 写完了释放锁
s.safeMap[k] = v // 写入数据
}
func main() {
// 创建对象
s := SafeMap{
safeMap: map[string]interface{}{},
Mutex: sync.Mutex{},
}
for i := 0; i < 10; i++ {
go func(i int) {
k := fmt.Sprintf("%d", i)
// 写数据
s.Write(k, i)
// 读数据
fmt.Println(s.Read(k))
}(i)
}
time.Sleep(time.Second * 3)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)