package main import ( "fmt" "sync" "time" ) var ( x int64 wg sync.WaitGroup rwlock sync.RWMutex lock sync.Mutex ) func main() { start := time.Now() for i := 0; i < 10; i++ { wg.Add(1) go write() } for i := 0; i < 100; i++ { wg.Add(1) go read() } wg.Wait() fmt.Println("cost:", time.Since(start)) } func read() { //lock.Lock() rwlock.RLock() time.Sleep(time.Millisecond) //lock.Unlock() rwlock.RUnlock() wg.Done() } func write() { rwlock.Lock() //lock.Lock() x = x + 1 time.Sleep(10 * time.Millisecond) //lock.Unlock() rwlock.Unlock() wg.Done() }