返回介绍

第一百零五天

发布于 2023-06-25 22:22:03 字数 1715 浏览 0 评论 0 收藏 0

1.下面代码输出什么?请简要说明。

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 其实是已经加锁状态,再加锁会死锁。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文