点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
你好哇,欢迎来答题,一起来看下昨天题目的解析:
1.关于同步锁,下面说法正确的是?
A. 当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖乖的等待,除非该 goroutine 释放这个 Mutex;
B. RWMutex 在读锁占用的情况下,会阻止写,但不阻止读;
C. RWMutex 在写锁占用情况下,会阻止任何其他 goroutine(无论读和写)进来,整个锁相当于由该 goroutine 独占;
D. Lock() 操作需要保证有 Unlock() 或 RUnlock() 调用与之对应;
参考答案及解析:ABC。
2.下面代码输出什么?请简要说明。
1func main() {
2 var wg sync.WaitGroup
3 wg.Add(1)
4 go func() {
5 time.Sleep(time.Millisecond)
6 wg.Done()
7 wg.Add(1)
8 }()
9 wg.Wait()
10}
A. 不能编译;
B. 无输出,正常退出;
C. 程序 hang 住;
D. panic;
参考答案及解析:D。WaitGroup 在调用 Wait() 之后不能再调用 Add() 方法的。
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
1.下面代码输出什么?请简要说明。
1var c = make(chan int)
2var a int
3
4func f() {
5 a = 1
6 <-c
7}
8func main() {
9 go f()
10 c <- 0
11 print(a)
12}
A. 不能编译;
B. 输出 1;
C. 输出 0;
D. panic;
2.下面代码输出什么?请简要说明。
1type MyMutex struct {
2 count int
3 sync.Mutex
4}
5
6func main() {
7 var mu MyMutex
8 mu.Lock()
9 var mu1 = mu
10 mu.count++
11 mu.Unlock()
12 mu1.Lock()
13 mu1.count++
14 mu1.Unlock()
15 fmt.Println(mu.count, mu1.count)
16}
A. 不能编译;
B. 输出 1, 1;
C. 输出 1, 2;
D. fatal error;
引自博客《鸟窝》 https://colobu.com/
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!
给个[在看],是对四哥最大的支持