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

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

轉(zhuǎn)到頻道 - 我的代碼看起來會覆蓋頻道但有效。

轉(zhuǎn)到頻道 - 我的代碼看起來會覆蓋頻道但有效。

Go
慕運(yùn)維8079593 2021-11-22 18:54:36
最近剛開始學(xué)習(xí)Go,學(xué)習(xí)Goroutine的時候很迷茫。這是我的代碼。這打算同時完成3個過程。package mainimport (    "fmt"    "log"    "time")func wait1(c chan string) {    time.Sleep(1 * time.Second)    log.Print("waited 1 sec")    c <- "wait1 finished\n"}func wait2(c chan string) {    time.Sleep(2 * time.Second)    log.Print("waited 2 sec")    c <- "wait2 finished\n"}func wait3(c chan string) {    time.Sleep(3 * time.Second)    log.Print("waited 3 sec")    c <- "wait3 finished\n"}func main() {    c := make(chan string, 3)    log.Print("started")    go wait1(c)    go wait2(c)    go wait3(c)    w1, w2, w3 := <-c, <-c, <-c    log.Print("finished")    fmt.Println(w1, w2, w3)}對我來說,這部分看起來將不同的函數(shù)輸入到名為 c 的同一個通道中,并嘗試打印從 c 接收到的值。c := make(chan string, 3)log.Print("started")go wait1(c)go wait2(c)go wait3(c)w1, w2, w3 := <-c, <-c, <-clog.Print("finished")fmt.Println(w1, w2, w3)但是,如您所見,輸出正是我所期望的。它同時處理 3 個函數(shù)并返回“完成”語句。2015/11/25 09:41:31 started2015/11/25 09:41:32 waited 1 sec2015/11/25 09:41:33 waited 2 sec2015/11/25 09:41:34 waited 3 sec2015/11/25 09:41:34 finishedwait1 finishedwait2 finishedwait3 finished為什么沒有必要創(chuàng)建 3 個不同的通道,如 c1、c2、c3...?為什么即使我使用名為 c 的同一個通道,值也不會被覆蓋?
查看完整描述

2 回答

?
郎朗坤

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

據(jù)我了解,您將渠道視為一個變量。一個可以保存一些值的變量。因此,如果有一些,value1而您又寫了另一個,value2那么您基本上預(yù)計(jì)它們value1會消失。這是錯誤的。

嘗試將通道視為緩沖區(qū)或優(yōu)先級隊(duì)列(有些人認(rèn)為比較粗略)。通道有它的大?。愕牡谌齻€變量3),它告訴它可以同時有多少個值。一旦你在通道中放入了一些東西,你就可以將它看作是優(yōu)先級等于完成這個 go-routine 所需時間的進(jìn)程。

因此,在您的情況下,您將 3 個元素放入優(yōu)先級隊(duì)列中go wait(),然后使用w1, w2, w3 := <-c, <-c, <-c. 所以沒有什么會被覆蓋。


查看完整回答
反對 回復(fù) 2021-11-22
?
Qyouu

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

無緩沖通道在發(fā)送數(shù)據(jù)之前同步。因此,在這種情況下,您<-c在分配行中的連續(xù)調(diào)用將阻塞,直到另一端的等待函數(shù)通過發(fā)送某些內(nèi)容為止。

不過,Markus 提出了一個很好的觀點(diǎn),應(yīng)該指出這w1, w2, w3 := <-c, <-c, <-c只是因?yàn)槟呀?jīng)錯開了不同等待功能的等待時間。如果這些函數(shù)在通道上發(fā)送數(shù)據(jù)之前等待了任意時間,您將無法保證 w2 被分配給從 wait2 發(fā)送的結(jié)果。它只會被設(shè)置為通過通道發(fā)送的第二個值。


查看完整回答
反對 回復(fù) 2021-11-22
  • 2 回答
  • 0 關(guān)注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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