原文地址:Go-翻过的一些面试题目
1、以下代码会输出什么?请简要说明。
var c = make(chan int)
var a int
func f() {
a = 1
<-c
}
func main() {
go f()
c <- 0
print(a)
}
能正确输出1,不过主协程会阻塞 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)
}
以上代码会【fatal error】,因为加锁后复制变量,会将锁的状态也复制,所以mu1实质上是已经加锁的状态,再加锁的话会死锁。
3、关于同步锁的一些说法。。。
当一个goroutine获得了Mutex后,其它goroutine就只能等待,除非该goroutine主动释放此Mutex,RWMutex在读锁占用的情况下,会阻止写,但不阻止读,RWMutex在写锁占用情况下,会阻止任何其它goroutine(无论读和写)进来,整个锁相当于由该goroutine独占。
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。