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

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

等待互斥體而不獲取它

等待互斥體而不獲取它

Go
LEATH 2022-08-24 10:37:58
我一直在編寫(xiě)一個(gè)小型微服務(wù),以便熟悉Go及其并發(fā)機(jī)制。在我的程序中,我有一個(gè)具有狀態(tài)的結(jié)構(gòu),并且我想同步該狀態(tài),以便多個(gè)goroutine能夠讀取它,但當(dāng)另一個(gè)goroutine正在更新該狀態(tài)時(shí),則不能。最初,我認(rèn)為RWMutax是我需要的,但是根據(jù)文檔,只有一個(gè)goroutine可以在任何給定的哀悼中獲得讀鎖定。我要說(shuō)這句話:“如果一個(gè) goroutine 拿著一個(gè) RWMutex 進(jìn)行讀取,而另一個(gè) goroutine 可能會(huì)調(diào)用 Lock,那么在釋放初始讀鎖定之前,沒(méi)有 goroutine 應(yīng)該能夠獲得讀鎖定。有沒(méi)有辦法在不獲取鎖的情況下等待互斥鎖?大致如下:type stateful struct {    state        int    stateMutex   sync.Mutex    beingUpdated bool}type Stateful interface {    GetState() int    SetState(st int)}func createStateful (sa string) stateful {    return server{state: 0, stateMutex: sync.Mutex{}, beingUpdated: false}}func (s *stateful) SetState(st int) {    s.stateMutex.Lock()    s.beingUpdated = true    s.state = st    s.beingUpdated = false    s.stateMutex.Unlock()}func (s *stateful) GetState() bool {    if s.beingUpdated {        // wait for s.stateMutex to be unlocked    }    return s.state}
查看完整描述

1 回答

?
FFIVE

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

您可能誤讀了同步。RWMutex docs:


...鎖可以由任意數(shù)量的讀取器或單個(gè)寫(xiě)入器持有。


所以你的代碼簡(jiǎn)化如下:


type stateful struct {

    l     sync.RWMutex // style: place lock above ...

    state int        //        ... the field it protects

}


func (s *stateful) SetState(st int) {

    s.l.Lock()

    defer s.l.Unlock()


    s.state = st

}


func (s *stateful) GetState() int {

    s.l.RLock()

    defer s.l.RUnlock()


    return s.state

}


查看完整回答
反對(duì) 回復(fù) 2022-08-24
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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