![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sync系列
文章平均质量分 71
ase2014
这个作者很懒,什么都没留下…
展开
-
golang源代码阅读,sync系列-Pool
目录总结问题问题解答使用源码分析结构体Put函数pinpinSlow函数runtime_procPin函数和runtime_procUnpin函数procPinprocUnpinshared,结构体poolDequeue概览结构体pushHead函数popHead函数popTail函数Get函数getSlow函数清理函数poolCleanup注册poolCleanup到触发点poolCleanup函数总结可以缓存变量实例的池子,每个pool存储一种类型的变量实例,支持并发内部存储结构,使用了链表、队原创 2021-05-16 13:27:00 · 359 阅读 · 0 评论 -
golang源代码阅读,sync系列-Cond
目录总结使用例子关键字源码分析结构体创建Cond函数Wait函数Signal函数Broadcast函数总结Cond创建的时候需要传入Locker,一般是Mutex或者RWMutex,调用Wait的时候,需要显示调用Cond的L进行加锁和解锁。调用Wait的goroutine会被挂起,当其它goroutine调用Signal会释放一个被挂起的goroutine。调用Broadcast,会将所有挂起的goroutine释放。不能被复制,否则会panic,Cond的copyChecker就是做这件事情原创 2021-05-10 00:28:34 · 277 阅读 · 4 评论 -
golang源代码阅读,sync系列-Map
目录总结关键字使用源码分析结构体函数分析Store函数Load函数LoadOrStore函数LoadAndDelete函数Delete函数Range函数总结golang的map是不支持并发访问和设置的,否则会panic。在golang的历史中,最开始只有不支持并发的map,但是实际上并发访问map的场景比较多,因此后续golang团队开发了sync.Mapsync.Map使用场景有限,虽然并发访问的map的场景都可以使用它,但是golang团队注释里面说明了它的使用场景如果有具体的类型,建议使用原创 2021-05-09 16:11:44 · 366 阅读 · 0 评论 -
golang源代码阅读,sync系列-Once
文章目录总结使用源码分析结构体Do函数总结Once的作用为只执行函数一次。Once使用的场景并不多。因为初始化单例,一般是利用init函数,init函数也执行一次,但是init函数里面执行的东西建议是非阻塞性的,否则会影响整体程序的加载,且不利于定位问题,如果阻塞了话。阻塞性的可以使用Once,如配置初始化Once执行的函数是没有入参和返回参数的,所以一般会使用闭包的方式,初始化一些参数因为Once的实例,一般是定义为全局变量,这样让某个函数只执行一次跟sync下的Mutex、RWMutex一样原创 2021-05-09 00:13:06 · 324 阅读 · 0 评论 -
golang源代码阅读,sync系列
WaitGroup实现:goroutine集合的管理互斥锁实现: 互斥锁读写互斥锁实现: 读写锁Once实现:待完成Cond实现:待完成Map实现:待完成Pool实现:待完成原创 2021-05-06 22:59:20 · 317 阅读 · 2 评论