Shadow
golang读写互斥锁笔记
golang读写互斥锁笔记
//读写锁笔记
package main
import (
"fmt"
"sync"
"time"
)
var (
x = 0
rwlock sync.RWMutex
wg sync.WaitGroup
)
func main() {
//开始时间
stime := time.Now()
//
for i := 0; i < 5; i++ {
wg.Add(1) //因为写操作需要等待,所以这里会花费 5*模拟写操作需要1s 的时间
go write()
}
for i := 0; i < 1000; i++ {
wg.Add(1)
go read() //因为读操作不需要等待,所以1000次,花费的时间也是第一次读取的时间
}
wg.Wait()
//结束时间
etime := time.Now()
fmt.Println("值为:", x) //值为: 5
fmt.Println("总共花费:", etime.Sub(stime)) //总共花费: 6s
}
//写操作
func write() {
rwlock.Lock()
x++
time.Sleep(time.Second) //模拟写操作需要1s
rwlock.Unlock()
wg.Done()
}
//读操作
func read() {
rwlock.RLock()
time.Sleep(1000 * time.Millisecond) // //模拟写操作需要2ms
rwlock.RUnlock()
wg.Done()
}
Dcr163的博客
http://dcr163.cn/594.html(转载时请注明本文出处及文章链接)