Go的sync(一)
概述
如何處理go并發(fā)機(jī)制中不同goroutine之間的同步與通信,golang 中提供了sync包和channel機(jī)制來(lái)解決這一問(wèn)題.
sync六個(gè)基本的函數(shù)Once? WaitGroup? cond? ?mutex? rwmutex? pool??
總述
waitgroup
給協(xié)程標(biāo)注 讓程序不因?yàn)閰f(xié)程出現(xiàn)panic??一個(gè)sync總體的控制函數(shù)
once
用once可以保證上面的onc.Do()被執(zhí)行一次??執(zhí)行一次之后其他的協(xié)程就不會(huì)執(zhí)行了?
cond
cond其實(shí)就是哪個(gè)控制協(xié)程執(zhí)行的包函數(shù):讓哪個(gè)執(zhí)行,讓全部執(zhí)行,給函數(shù)標(biāo)注,讓函數(shù)等待執(zhí)行、?加鎖等
Signal是執(zhí)行一個(gè)協(xié)程的信號(hào)
Broadcast是執(zhí)行全部協(xié)程的信號(hào)
wait 協(xié)程等待通知,阻塞在此
NewCond創(chuàng)建條件
cond.L.Lock() 給協(xié)程加鎖
cond.L.Unlock() ????//釋放鎖
pool
pool就是一個(gè)類(lèi)似中間件的? 存放東西的
put放入
get取出
New為走默認(rèn)值
RWMUX
RWMUX是控制多個(gè)協(xié)程對(duì)于資源的使用順序的
RLOCK RULOCK
LOCK ULOCK
在一個(gè)協(xié)程里面
對(duì)資源的
讀鎖的時(shí)候別的協(xié)程也可以讀,但是不可以寫(xiě)
寫(xiě)鎖的時(shí)候別的協(xié)程不可以操作,不可以讀也不可以寫(xiě)
Mutex
多個(gè)協(xié)程會(huì)操作一個(gè)特定資源,就會(huì)出現(xiàn)意想不到的錯(cuò)誤,所以我們使用互斥鎖,
一個(gè)協(xié)程使用特定資源的時(shí)候進(jìn)行鎖定,用完解鎖,
再讓其他協(xié)程使用,所以其他協(xié)程想使用此資源,必須自己給資源解鎖或等待正在使用的協(xié)程解鎖
在代碼中就是鎖定一段代碼,代碼里面有資源
函數(shù)
type Condfunc NewCond(l Locker) *Condfunc (c *Cond) Broadcast()func (c *Cond) Signal()func (c *Cond) Wait() type Locker type Mutexfunc (m *Mutex) Lock()func (m *Mutex) Unlock() type Oncefunc (o *Once) Do(f func()) type Poolfunc (p *Pool) Get() interface{}func (p *Pool) Put(x interface{}) type RWMutexfunc (rw *RWMutex) Lock()func (rw *RWMutex) RLock()func (rw *RWMutex) RLocker() Lockerfunc (rw *RWMutex) RUnlock()func (rw *RWMutex) Unlock() type WaitGroupfunc (wg *WaitGroup) Add(delta int)func (wg *WaitGroup) Done()func (wg *WaitGroup) Wait()總結(jié)
以上是生活随笔為你收集整理的Go的sync(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Go文件函数_上传
- 下一篇: Go的sync.Once(三):once