2020年12月28日

go学习笔记 禁止拷贝noCopy

摘要: go中的copy,一般习惯来讲都是值拷贝,但是这种拷贝存在的问题是锁对象的“失效”,Go中没有原生的禁止拷贝的方式,所以如果有的结构体,你希望使用者无法拷贝,只能指针传递保证全局唯一的话,可以这么干,定义 一个结构体叫 noCopy ,要实现 sync.Locker 这个接口[我也是看锁的源码 里面 阅读全文

posted @ 2020-12-28 18:54 dz45693 阅读(1223) 评论(0) 推荐(0) 编辑

go学习笔记 sync/Cond源码

摘要: ond需要指定一个Locker,通常是一个*Mutex或*RWMutex。 func (c *Cond) Broadcast() 和 func (c *Cond) Signal() 唤醒因wait condition而挂起goroutine,区别是Signal只唤醒一个,而Broadcast唤醒所有 阅读全文

posted @ 2020-12-28 16:23 dz45693 阅读(1192) 评论(0) 推荐(0) 编辑

go学习笔记 sync/once源码 和 sync/WaitGroup源码

摘要: sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次。 package sync import ( "sync/atomic" ) // Once is an object th 阅读全文

posted @ 2020-12-28 14:43 dz45693 阅读(1156) 评论(0) 推荐(0) 编辑

go学习笔记 sync/RWMutex源码

摘要: RWMutex是一个读写锁,该锁可以加多个读锁或者一个写锁,其经常用于读次数远远多于写次数的场景.func (rw *RWMutex) Lock() 写锁,如果在添加写锁之前已经有其他的读锁和写锁,则lock就会阻塞直到该锁可用,为确保该锁最终可用,已阻塞的 Lock 调用会从获得的锁中排除新的读取 阅读全文

posted @ 2020-12-28 13:47 dz45693 阅读(1109) 评论(0) 推荐(0) 编辑

go学习笔记 sync/mutex源码

摘要: Mutex 是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁。 在一个goroutine获得 Mutex 后,其他goroutine只能等到这个goroutine释放该Mutex使用Lock() 加锁后,不能再继续对其加锁,直到利用 阅读全文

posted @ 2020-12-28 11:38 dz45693 阅读(1126) 评论(0) 推荐(0) 编辑

go学习笔记 Go的sync.Pool源码

摘要: Pool介绍# 总所周知Go 是一个自动垃圾回收的编程语言,采用三色并发标记算法标记对象并回收。如果你想使用 Go 开发一个高性能的应用程序的话,就必须考虑垃圾回收给性能带来的影响。因为Go 在垃圾回收的时候会有一个STW(stop-the-world,程序暂停)的时间,并且如果对象太多,做标记也需 阅读全文

posted @ 2020-12-28 09:50 dz45693 阅读(1198) 评论(0) 推荐(0) 编辑

导航