91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sync包的作用是什么

發布時間:2021-06-29 13:48:11 來源:億速云 閱讀:200 作者:chen 欄目:大數據

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

sync.Once

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

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

sync.Mutex

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

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

sync.RWMutex

RWMutex 比 Mutex 多了一個“讀鎖定”和“讀解鎖”,可以讓多個例程同時讀取某對象。
RWMutex 的初始值為解鎖狀態。
RWMutex 通常作為其它結構體的匿名字段使用。
Mutex 可以安全的在多個例程中并行使用。

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

sync.WaitGroup

WaitGroup 用于等待一組例程的結束。
主例程在創建每個子例程的時候先調用 Add 增加等待計數,每個子例程在結束時調用 Done 減少例程計數。
之后,主例程通過 Wait 方法開始等待,直到計數器歸零才繼續執行。 

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

sync.Cron

條件等待通過 Wait 讓例程等待,通過 Signal 讓一個等待的例程繼續,通過 Broadcast 讓所有等待的例程繼續。
在 Wait 之前應當手動為 c.L 上鎖,Wait 結束后手動解鎖。為避免虛假喚醒,需要將 Wait 放到一個條件判斷循環中

官方要求的寫法如下:

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

到此,關于“sync包的作用是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐梓县| 沅江市| 名山县| 江达县| 石泉县| 托里县| 丰顺县| 黎川县| 萍乡市| 海伦市| 赞皇县| 米林县| 双鸭山市| 循化| 灌云县| 满城县| 来安县| 金平| 洮南市| 高陵县| 承德县| 安庆市| 云龙县| 江西省| 讷河市| 蒲城县| 门源| 武平县| 阿尔山市| 深泽县| 竹北市| 南岸区| 社旗县| 榆社县| 申扎县| 台安县| 合江县| 特克斯县| 韶山市| 平泉县| 铜山县|