摘要:
模型 三部分组成: 发送等待队列 接收等待队列 管道 缓存区 定义 在 runtime 的chan.go中 type hchan struct { qcount uint dataqsiz uint buf unsafe.Pointer elemsize uint16 elemtype *_type 阅读全文
posted @ 2023-12-01 23:51
杨阳的技术博客
阅读(76)
评论(0)
推荐(0)
摘要:
go读写锁 互斥锁每次只让一 g通过,去读写数据。但是读数据操作,并发其实没有问题。所以诞生了 读写锁。 读协程可以并发,一起读。但是 写协程还是要走互斥锁,只能一个个通过。 先加了读锁 先加了读锁。那么写的协程,就需要去休眠队列中等待。一直到读锁都释放。 先加了写锁 这个时候,不管再来 写协程还是 阅读全文
posted @ 2023-12-01 19:47
杨阳的技术博客
阅读(150)
评论(0)
推荐(0)
摘要:
互斥锁的定义 type Mutex struct { state int32 sema uint32 } 一个 sema,背后实际上 是一个 休眠队列,可以看下上篇。 一个state,这个状态 分为4个部分。 后三位 各自代表一个状态。 前29位代表最大可等待协程的个数。 state的结构 lock 阅读全文
posted @ 2023-12-01 17:07
杨阳的技术博客
阅读(109)
评论(0)
推荐(0)
摘要:
atomic和sema是实现go中锁的基础,简单看下他们的实现原理。 atomic atomic 常用来作为保证原子性的操作。 当多个协程,同时一个数据进行操作时候,如果不加锁,最终的很难得到想要的结果。 var p int64 = 0 func add() { p = p + 1 } func m 阅读全文
posted @ 2023-12-01 12:08
杨阳的技术博客
阅读(228)
评论(0)
推荐(0)

浙公网安备 33010602011771号