github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/14_concurrent/rwmutex/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "sync" 6 "time" 7 ) 8 9 var mu sync.RWMutex 10 var count int 11 12 /* 13 A: 不能编译 14 B: 输出 1 15 C: 程序hang住 16 D: panic 答案还是死锁 17 */ 18 func main() { 19 go A() 20 time.Sleep(2 * time.Second) 21 mu.Lock() 22 defer mu.Unlock() 23 count++ 24 fmt.Println(count) 25 } 26 func A() { 27 mu.RLock() 28 defer mu.RUnlock() 29 B() 30 } 31 func B() { 32 time.Sleep(5 * time.Second) 33 C() 34 } 35 func C() { 36 mu.RLock() 37 defer mu.RUnlock() 38 }