Go的sync(一)
概述
如何處理go并發機制中不同goroutine之間的同步與通信,golang 中提供了sync包和channel機制來解決這一問題.
sync六個基本的函數Once? WaitGroup? cond? ?mutex? rwmutex? pool??
總述
waitgroup
給協程標注 讓程序不因為協程出現panic??一個sync總體的控制函數
once
用once可以保證上面的onc.Do()被執行一次??執行一次之后其他的協程就不會執行了?
cond
cond其實就是哪個控制協程執行的包函數:讓哪個執行,讓全部執行,給函數標注,讓函數等待執行、?加鎖等
Signal是執行一個協程的信號
Broadcast是執行全部協程的信號
wait 協程等待通知,阻塞在此
NewCond創建條件
cond.L.Lock() 給協程加鎖
cond.L.Unlock() ????//釋放鎖
pool
pool就是一個類似中間件的? 存放東西的
put放入
get取出
New為走默認值
RWMUX
RWMUX是控制多個協程對于資源的使用順序的
RLOCK RULOCK
LOCK ULOCK
在一個協程里面
對資源的
讀鎖的時候別的協程也可以讀,但是不可以寫
寫鎖的時候別的協程不可以操作,不可以讀也不可以寫
Mutex
多個協程會操作一個特定資源,就會出現意想不到的錯誤,所以我們使用互斥鎖,
一個協程使用特定資源的時候進行鎖定,用完解鎖,
再讓其他協程使用,所以其他協程想使用此資源,必須自己給資源解鎖或等待正在使用的協程解鎖
在代碼中就是鎖定一段代碼,代碼里面有資源
函數
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()總結
以上是生活随笔為你收集整理的Go的sync(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go文件函数_上传
- 下一篇: 从现地址到怎么做公交车济南龙奥大厦东建设