日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go的sync.Cond(四)

發布時間:2024/9/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go的sync.Cond(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Cond

// cond是只會執行加鎖的協程,相當于加了一個標識,

// lock與ulock是標識? 相當于門 ,讓讓正確的人(協程)進入

// wait是堵塞等待? 相當于一把鎖

// Signal會給信號疏通一個加鎖加wait協程? ? 相當于只能開一把鎖的鑰匙

// Broadcast疏通所有剩下的加鎖加wait協程? ? 相當于能夠開所有加鎖的鑰匙萬能鑰匙

文章

手冊:https://studygolang.com/static/pkgdoc/pkg/sync.htm#Cond

博文:https://blog.csdn.net/qq_35976351/article/details/82117769

代碼示例

package mainimport ("fmt""sync""time" )var locker = new(sync.Mutex) // func NewCond(l Locker) *Cond:用于創建條件,根據實際情況傳入sync.Mutex或者sync.RWMutex的 指針,一定要是指針,否則會發生復制導致鎖的失效 var cond = sync.NewCond(locker) var waitgroup sync.WaitGroupfunc test(x int) {cond.L.Lock()// cond.Wait() //有wait必須有lockfmt.Println("test",x)time.Sleep(time.Second * 1)defer func() {cond.L.Unlock() //釋放鎖waitgroup.Done() //減一個協程}() }func aaaa(x int) {cond.L.Lock()cond.Wait() //有wait必須有lockfmt.Println("aaaa",x)time.Sleep(time.Second * 1)defer func() {cond.L.Unlock() //釋放鎖waitgroup.Done() //減一個協程}() }func bbbb(x int) {fmt.Println("bbbb",x) }func main() {for i := 0; i < 5; i++ {go test(i)go aaaa(i)go bbbb(i)waitgroup.Add(1*2)}fmt.Println("Signal:")cond.Signal() //前面的cond就是表示喚醒加鎖的:加wait就是喚醒一個加鎖的協程 不加wait會喚醒所有沒堵塞的加鎖協程。time.Sleep(time.Second * 20)fmt.Println("Broadcast:") cond.Broadcast() //喚醒剩下堵塞的waitgroup.Wait() //保證所有協程執行完畢 }// 加wait的 // Signal: // 1 // Broadcast: // 4 // 2 // 0 // 3// 不加wait的 // Signal: // 1 // 0 // 3 // 4 // Broadcast: // 2// 兩個函數的協程: // 第一個函數都執行了,第二個加了wait只執行了一次 // cond是只會執行加鎖的協程,相當于加了一個標識, // lock與ulock是表示 // wait是堵塞等待 // Signal會給信號疏通一個加鎖協程 // Broadcast疏通所有剩下的加鎖協程 // Signal: // test 0 // test 1 // test 3 // test 2 // test 4 // aaaa 1 // Broadcast: // aaaa 4 // aaaa 2 // aaaa 0 // aaaa 3// 三個函數的 // Signal: // bbbb 0 // bbbb 3 // bbbb 1 // bbbb 2 // bbbb 4 // test 0 // test 1 // test 4 // test 2 // test 3 // aaaa 1 // Broadcast: // aaaa 4 // aaaa 3 // aaaa 0 // aaaa 2

總結

以上是生活随笔為你收集整理的Go的sync.Cond(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。