第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

同時(shí)調(diào)用`sync.Cond`的`Wait()`方法是否安全?

同時(shí)調(diào)用`sync.Cond`的`Wait()`方法是否安全?

Go
元芳怎么了 2021-11-22 19:45:07
根據(jù)文檔,是否調(diào)用了安全的Wait()方法sync.Cond,它Unlock()首先執(zhí)行?假設(shè)我們正在檢查要滿足的條件:func sample() {    cond = &sync.Cond{L: &sync.Mutex{}} // accessible by other parts of program    go func() {        cond.L.Lock()        for !condition() {            cond.Wait()        }        // do stuff ...        cond.L.Unlock()    }()    go func() {        cond.L.Lock()        mutation()        cond.L.Unlock()        cond.Signal()    }()}和:func condition() bool {    // assuming someSharedState is a more complex state than just a bool    return someSharedState}func mutation() {    // assuming someSharedState is a more complex state than just a bool    // (A) state mutation on someSharedState}既然Wait()執(zhí)行了Unlock,那么 (A) 應(yīng)該有自己的鎖定嗎?還是原子性?
查看完整描述

1 回答

?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

是的,Wait即使在它L.Unlock()首先調(diào)用時(shí)調(diào)用也是安全的,但是在調(diào)用Wait之前和檢查條件之前獲取鎖是必不可少的,因?yàn)樵谶@種情況下,兩者都不是線程安全的。

Wait原子地解鎖c.L 并暫停調(diào)用 goroutine 的執(zhí)行。稍后恢復(fù)執(zhí)行后,返回前Wait鎖定c.L

  1. 調(diào)用的 goroutineWait獲取了鎖,檢查了條件,發(fā)現(xiàn)不滿意。

  2. 現(xiàn)在它等待,但為了允許條件的變化,它需要返回鎖定。Wait自動(dòng)為您執(zhí)行此操作,然后掛起 goroutine。

  3. 現(xiàn)在條件可能發(fā)生變化,最終 goroutine 被Broadcastor喚醒Signal。然后它獲取鎖以再次檢查條件(這必須對(duì)每個(gè)等待的 goroutine 一一進(jìn)行,否則將無法知道現(xiàn)在有多少 goroutine 自由運(yùn)行)。


查看完整回答
反對(duì) 回復(fù) 2021-11-22
  • 1 回答
  • 0 關(guān)注
  • 185 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)