package main import ( "fmt" "sync" "time" ) /* 读写锁 多路只读 一路只写 读写互斥 */ /*读写锁API介绍*/ func main101() { var rwm sync.RWMutex //锁定为写模式---一路只写 rwm.Lock() //解锁写模式 rwm.Unlock() //锁定为读模式---多路只读 rwm.RLock() //释放读写锁 rwm.RUnlock() } /* 数据库一写多度 ·Read方法设定为多路只读 ·Write方法设定为单路只写 ·创建5读5写10条协程,观察读写锁效果 */ func main() { var wg sync.WaitGroup //声明读写锁 var rwm sync.RWMutex for i := 0; i < 5; i++ { wg.Add(1) go func() { //锁定为只读模式,运行多个协程同时抢到读锁 rwm.RLock() fmt.Println("读取数据库") <-time.After(3*time.Second) //解读锁 rwm.RUnlock() wg.Done() }() wg.Add(1) go func() { //锁定为写模式,只运行一个协程抢到写锁 rwm.Lock() fmt.Println("写入数据库") <-time.After(3*time.Second) //解锁 rwm.Unlock() wg.Done() }() } wg.Wait() fmt.Println("main over") }