在Go的src目录(grep -r Lock .|grep chan)中进行greping会给出以下输出:./pkg/runtime/chan.c: Lock;./pkg/runtime/chan_test.go: m.Lock()./pkg/runtime/chan_test.go: m.Lock() // wait./pkg/sync/cond.go: L Locker // held while observing or changing the condition不过不要锁定我的机器(MacOS,intel x86_64)。是否有任何官方资源可以对此进行验证?
2 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
如果您runtime·chansend
在chan.c中阅读该函数,您将看到runtime·lock
在检查通道是否被缓冲之前调用了该函数if(c->dataqsiz > 0)
。
换句话说,缓冲的通道(以及通常所有通道)都使用锁。
搜索未找到它的原因是,您正在寻找大写字母L的“锁定”。用于通道的锁定功能是运行时中未导出的C函数。
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报
0/150
提交
取消