欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

sync包的作用是什么

這篇文章主要介紹“sync包的作用是什么”,在日常操作中,相信很多人在sync包的作用是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”sync包的作用是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

為紅塔等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及紅塔網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、紅塔網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

sync.Once

Once 的作用是多次調(diào)用但只執(zhí)行一次,Once 只有一個(gè)方法,Once.Do(),向 Do 傳入一個(gè)函數(shù),這個(gè)函數(shù)在第一次執(zhí)行 Once.Do() 的時(shí)候會(huì)被調(diào)用,以后再執(zhí)行 Once.Do() 將沒有任何動(dòng)作,即使傳入了其它的函數(shù),也不會(huì)被執(zhí)行,如果要執(zhí)行其它函數(shù),需要重新創(chuàng)建一個(gè) Once 對(duì)象。
Once 可以安全的在多個(gè)例程中并行使用。

type Once struct {     m    Mutex     done uint32 }
// 都次調(diào)用,近執(zhí)行一次方法f func (o *Once) Do(f func())

sync.Mutex

互斥鎖用來保證在任一時(shí)刻,只能有一個(gè)例程訪問某對(duì)象。
Mutex 的初始值為解鎖狀態(tài)。
Mutex 通常作為其它結(jié)構(gòu)體的匿名字段使用,使該結(jié)構(gòu)體具有 Lock 和 Unlock 方法。
Mutex 可以安全的在多個(gè)例程中并行使用。

// Locker 接口包裝了基本的 Lock 和 UnLock 方法,用于加鎖和解鎖。 type Locker interface {     Lock()     Unlock() }
// Lock 用于鎖住 m,如果 m 已經(jīng)被加鎖,則 Lock 將被阻塞,直到 m 被解鎖。 func (m *Mutex) Lock()
// Unlock 用于解鎖 m,如果 m 未加鎖,則該操作會(huì)引發(fā) panic。 func (m *Mutex) Unlock()

sync.RWMutex

RWMutex 比 Mutex 多了一個(gè)“讀鎖定”和“讀解鎖”,可以讓多個(gè)例程同時(shí)讀取某對(duì)象。
RWMutex 的初始值為解鎖狀態(tài)。
RWMutex 通常作為其它結(jié)構(gòu)體的匿名字段使用。
Mutex 可以安全的在多個(gè)例程中并行使用。

// Lock 將 rw 設(shè)置為寫鎖定狀態(tài),禁止其他例程讀取或?qū)懭搿?nbsp;func (rw *RWMutex) Lock()
// Unlock 解除 rw 的寫鎖定狀態(tài),如果 rw 未被寫鎖定,則該操作會(huì)引發(fā) panic。 func (rw *RWMutex) Unlock()
// RLock 將 rw 設(shè)置為讀鎖定狀態(tài),禁止其他例程寫入,但可以讀取。 func (rw *RWMutex) RLock()
// Runlock 解除 rw 的讀鎖定狀態(tài),如果 rw 未被讀鎖頂,則該操作會(huì)引發(fā) panic。 func (rw *RWMutex) RUnlock()
// RLocker 返回一個(gè)互斥鎖,將 rw.RLock 和 rw.RUnlock 封裝成了一個(gè) Locker 接口。 func (rw *RWMutex) RLocker() Locker

sync.WaitGroup

WaitGroup 用于等待一組例程的結(jié)束。
主例程在創(chuàng)建每個(gè)子例程的時(shí)候先調(diào)用 Add 增加等待計(jì)數(shù),每個(gè)子例程在結(jié)束時(shí)調(diào)用 Done 減少例程計(jì)數(shù)。
之后,主例程通過 Wait 方法開始等待,直到計(jì)數(shù)器歸零才繼續(xù)執(zhí)行。 

// 計(jì)數(shù)器增加 delta,delta 可以是負(fù)數(shù)。 func (wg *WaitGroup) Add(delta int)
// 計(jì)數(shù)器減少 1 func (wg *WaitGroup) Done()
// 等待直到計(jì)數(shù)器歸零。如果計(jì)數(shù)器小于 0,則該操作會(huì)引發(fā) panic。 func (wg *WaitGroup) Wait()

sync.Cron

條件等待通過 Wait 讓例程等待,通過 Signal 讓一個(gè)等待的例程繼續(xù),通過 Broadcast 讓所有等待的例程繼續(xù)。
在 Wait 之前應(yīng)當(dāng)手動(dòng)為 c.L 上鎖,Wait 結(jié)束后手動(dòng)解鎖。為避免虛假喚醒,需要將 Wait 放到一個(gè)條件判斷循環(huán)中

官方要求的寫法如下:

c.L.Lock() for !condition() {     c.Wait() } // 執(zhí)行條件滿足之后的動(dòng)作... c.L.Unlock()
type Cond struct {     L Locker // 在“檢查條件”或“更改條件”時(shí) L 應(yīng)該鎖定。 } 
// 創(chuàng)建一個(gè)條件等待 func NewCond(l Locker) *Cond
// Broadcast 喚醒所有等待的 Wait,建議在“更改條件”時(shí)鎖定 c.L,更改完畢再解鎖。 func (c *Cond) Broadcast()
// Signal 喚醒一個(gè)等待的 Wait,建議在“更改條件”時(shí)鎖定 c.L,更改完畢再解鎖。 func (c *Cond) Signal()
// Wait 會(huì)解鎖 c.L 并進(jìn)入等待狀態(tài),在被喚醒時(shí),會(huì)重新鎖定 c.L func (c *Cond) Wait()

到此,關(guān)于“sync包的作用是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前名稱:sync包的作用是什么
本文地址:http://www.chinadenli.net/article16/iiejgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)Google網(wǎng)站改版標(biāo)簽優(yōu)化外貿(mào)建站App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)