golang面试-day105

下面代码输出什么?请简要说明。
var c = make(chan int)
var a int

func f() {
    a = 1
    <-c
}
func main() {
    go f()
    c <- 0
    print(a)
}
  • A. 不能编译;
  • B. 输出 1;
  • C. 输出 0;
  • D. panic;

参考答案及解析:B。能正确输出,不过主协程会阻塞 f() 函数的执行。

2.下面代码输出什么?请简要说明。
type MyMutex struct {
    count int
    sync.Mutex
}

func main() {
    var mu MyMutex
    mu.Lock()
    var mu1 = mu
    mu.count++
    mu.Unlock()
    mu1.Lock()
    mu1.count++
    mu1.Unlock()
    fmt.Println(mu.count, mu1.count)
}
  • A. 不能编译;
  • B. 输出 1, 1;
  • C. 输出 1, 2;
  • D. fatal error;

参考答案及解析:D。加锁后复制变量,会将锁的状态也复制,所以 mu1 其实是已经加锁状态,再加锁会死锁。

猜你喜欢

转载自blog.csdn.net/FXH1989/article/details/141292035
105