//注意:互斥锁,读写锁,同步数据,能不用锁就不用锁,性能问题,加锁和解锁是耗费时间的
//绝大部分的web系统都是读多,写少
//有一万个人同时读数据库,A读的时候B能读吗?为什么要加锁,写上和读上加同一把锁,并发严重下降
//如果这把锁可以做到读之间不会产生影响,写和读之间会产生影响,那就很好
如下代码:
package main
import (
"fmt"
"sync"
"time"
)
var wg sync.WaitGroup
var rwlock sync.RWMutex
func read() {
defer wg.Done()
rwlock.RLock()
fmt.Println("开始读取数据")
time.Sleep(time.Second)
fmt.Println("读取成功")
rwlock.RUnlock()
}
func write() {
defer wg.Done()
rwlock.Lock()
fmt.Println("开始修改数据")
time.Sleep(time.Second * 10)
fmt.Println("修改成功")
rwlock.Unlock()
}
func main() {
wg.Add(6)
for i := 0; i < 5; i++ {
go read()
}
for i := 0; i < 1; i++ {
go write()
}
wg.Wait()
}