Channel的数据结构是什么?
Channel的数据结构是什么?
Last updated
Channel的数据结构是什么?
Last updated
type hchan struct {
qcount uint // Channel 中的元素个数
dataqsiz uint // Channel 中的环形/循环队列的长度
buf unsafe.Pointer // 指向底层循环数组的指针(只针对有缓冲的 channel)
elemsize uint16 // 元素大小
closed uint32 // 是否被关闭的标志
elemtype *_type // 元素类型
sendx uint // 队列下标,指示元素写入时存放至队列中的位置
recvx uint // 队列下标,指示下一个被读取的元素在队列中的位置
recvq waitq // 等待读的 goroutine 队列
sendq waitq // 等待写的 goroutine 队列
lock mutex // 互斥锁,保护 hchan 中所有字段,不允许并发读写
}type waitq struct {
first *sudog
last *sudog
}