1、阅读下例代码,从以下四个选项中选择代码执行结果(Mutex相关)。
package main
import (
"fmt"
"sync"
)
var mu sync.Mutex
var chain string
func main() {
chain = "main"
A()
fmt.Println(chain)
}
func A() {
mu.Lock()
defer mu.Unlock()
chain = chain + " --> A"
B()
}
func B() {
chain = chain + " --> B"
C()
}
func C() {
mu.Lock()
defer mu.Unlock()
chain = chain + " --> C"
}
选项如下:
-
不能编译
-
输出main-->A-->B-->C
-
输出main
-
panic
解析:4。上述代码会产生死锁panic,因为Mutex是互斥锁。
2、阅读下例代码,从以下四个选项中选择代码执行结果(RWMutex相关)。
package main
import (
"fmt"
"sync"
"time"
)
var mu sync.RWMutex
var count int
func main() {
go A()
time.Sleep(2 * time.Second)
mu.Lock()
defer mu.Unlock()
count++
fmt.Println(count)
}
func A() {
mu.RLock()
defer mu.RUnlock()
B()
}
func B() {
time.Sleep(5 * time.Second)
C()
}
func C() {