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  }