github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/14_concurrent/mutex/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "sync" 6 ) 7 8 /* 9 A: 不能编译 10 B: 输出 main --> A --> B --> C 11 C: 输出 main 12 D: panic 答案deadlock! 13 */ 14 var mu sync.Mutex 15 var chain string 16 17 func main() { 18 chain = "main" 19 A() 20 fmt.Println(chain) 21 } 22 func A() { 23 mu.Lock() 24 defer mu.Unlock() 25 chain = chain + " --> A" 26 B() 27 } 28 func B() { 29 chain = chain + " --> B" 30 C() 31 } 32 func C() { 33 mu.Lock() 34 defer mu.Unlock() 35 chain = chain + " --> C" 36 }