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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 語言中臨界區(qū)的交替執(zhí)行

Go 語言中臨界區(qū)的交替執(zhí)行

Go
尚方寶劍之說 2021-06-24 15:19:39
我有兩個 go 例程:func f1 {     ... some code     // critical section 1 (CS1)             ... critical section code                                       // end criticla section 1    ... more code}func f2 {     ... some code     // critical section 2 (CS2)            ... critical section code                                    // end criticla section 2    ... more code}func main() {   go f1()   go f2()}確保這些例程中的臨界區(qū)始終交替執(zhí)行的正確方法是什么?換句話說,CS1 應(yīng)該只在 CS2 之后執(zhí)行,反之亦然:CS1、CS2、CS1、CS2、CS1 等。
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個贊

如果你在不同的 goroutines 中運(yùn)行這些函數(shù),我會建議雙通道。這就像傳遞一個小布爾球。每個函數(shù)都有一個他們監(jiān)聽的通道,以及另一個通道,一旦關(guān)鍵部分完成,他們就會將球傳給另一個通道。那么您可以確定,無論何時調(diào)用它們,它們始終會交替運(yùn)行。


此模式還允許您使用 f3、f4 ... 擴(kuò)展循環(huán)。


package main


func f1(do chan bool, next chan bool) {

        //... some code


        <-do // Waits for the ball

        // critical section 1 (CS1)

        //... critical section code

        // end criticla section 1

        next <- true // Pass on the ball to the next function


        //... more code

}


func f2(do chan bool, next chan bool) {

        //... some code


        <-do

        // critical section 2 (CS2)

        //... critical section code

        // end criticla section 2

        next <- true


        //... more code

}


func main() {

    cf1 := make(chan bool, 1)

    cf2 := make(chan bool, 1)

    cf1 <- true // Let cf1 start with the ball


    go f1(cf1, cf2)

    go f2(cf2, cf1)


    // Wait here, otherwise it will just exit

}


查看完整回答
反對 回復(fù) 2021-06-28
  • 1 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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