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

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

Go lang中的線程同步

Go lang中的線程同步

Go
湖上湖 2021-09-13 10:26:10
我想更多地了解線程同步在 go 中是如何工作的。下面是我的程序的運(yùn)行版本,它使用完成的通道進(jìn)行同步。package mainimport (    . "fmt"    "runtime")func Goroutine1(i_chan chan int, done chan bool) {    for x := 0; x < 1000000; x++ {        i := <-i_chan        i++        i_chan <- i    }    done <- true}func Goroutine2(i_chan chan int, done chan bool) {    for x := 0; x < 1000000; x++ {        i := <-i_chan        i--        i_chan <- i    }    done <- true}func main() {    i_chan := make(chan int, 1)    done := make(chan bool, 2)    i_chan <- 0    runtime.GOMAXPROCS(runtime.NumCPU())    go Goroutine1(i_chan, done)    go Goroutine2(i_chan)    <-done    <-done    Printf("This is the value of i:%d\n", <-i_chan)}但是,當(dāng)我嘗試在沒有任何同步的情況下運(yùn)行它時(shí)。使用等待語句且沒有通道來指定何時(shí)完成,因此沒有同步。const MAX = 1000000func Goroutine1(i_chan chan int) {    for x := 0; x < MAX-23; x++ {        i := <-i_chan        i++        i_chan <- i    }}func main() {    i_chan := make(chan int, 1)    i_chan <- 0    runtime.GOMAXPROCS(runtime.NumCPU())    go Goroutine1(i_chan)    go Goroutine2(i_chan)    time.Sleep(100 * time.Millisecond)    Printf("This is the value of i:%d\n", <-i_chan)}它會(huì)打印出錯(cuò)誤的 i 值。如果您延長等待時(shí)間,例如 1 秒,它將完成并打印出正確的語句。我有點(diǎn)理解它有一些東西在你打印之前沒有完成兩個(gè)線程i_chan我只是對(duì)它的工作原理有點(diǎn)好奇。
查看完整描述

1 回答

  • 1 回答
  • 0 關(guān)注
  • 203 瀏覽

添加回答

舉報(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)