题目1
下面关于管道的描述正确的是(单选)?
A:读nil管道会触发panic
B:写nil管道会触发panic
C:读关闭管道会触发panic
D:写关闭的管道会触发panic
参考答案:
读写nil管道均会发生阻塞。关闭的管道仍然可以读取数据,如果管道还存在数据就正常读取,否则就会读取到该类型的零值。向关闭的管道写数据会触发panic。本题选D。
题目2
下面的函数输出什么?
func ChanCap() {
ch := make(chan int, 10)
ch <- 1
ch <- 2
fmt.Println(len(ch))
fmt.Println(cap(ch))
}
参考答案:
内置函数len()和cap()分别用于查询管道缓存中数据的个数及缓存的大小。
运行结果:2 10
题目3
以下选项可以实现互斥锁的是(单选)?
A:
var counter int = 0
var ch = make(chan int, 1)
func Worker() {
ch <- 1
counter++
<- ch
}
B:
var counter int = 0
var ch = make(chan int)
func Worker() {
ch <- 1
counter++
<- ch
}
C:
var counter int = 0
var ch = make(chan int, 1)
func Worker() {
<- ch
counter++
ch <- 1
}
D:
var counter int = 0
var ch = make(chan int)
func Worker() {
ch <- 1
counter++
<- ch
}
参考答案:
只有一个缓冲区的管道写入数据类似于加锁,读出数据类似于解锁。本体选A
选项B、D为无缓冲区管道,读写都会阻塞,选项C先读取数据,会发生阻塞。