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

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

如何實現(xiàn) pop -> 做某事 -> 使用 goroutines 推送隊列

如何實現(xiàn) pop -> 做某事 -> 使用 goroutines 推送隊列

Go
人到中年有點甜 2021-08-16 19:51:28
我有一個隊列,我想執(zhí)行以下操作:彈出第一個元素如果元素是偶數(shù),則推元素+1這應(yīng)該一直持續(xù)到隊列為空;此外,我想同時使用多個 goroutine。我可以為單個 goroutine 做,但是一旦我添加了一段時間,一切都會出錯,因為似乎創(chuàng)建了太多的 goroutine。即使放一個else {return}也不能解決問題。附帶問題:為什么不呢?我收到錯誤:syntax error: unexpected semicolon or newline before elsesyntax error: unexpected }var list = []int{0, 1, 2, 3}var mutex = &sync.Mutex{}func pop(out chan int) {    mutex.Lock()    element := list[0]    fmt.Println("element is ", element)    list = list[1:]    mutex.Unlock()    out <- element}func push(in chan int) {    for element := range in {        if element%2 == 0 {            mutex.Lock()            list = append(list, element+1)            fmt.Println("New list is ", list)            mutex.Unlock()        }    }}func main() {    out := make(chan int)    fmt.Println("MAIN")//  for len(list) != 0 {    go pop(out)    go push(out)//}    time.Sleep(2)}
查看完整描述

2 回答

?
白衣染霜花

TA貢獻1796條經(jīng)驗 獲得超10個贊

您的代碼存在多個問題。

  • else始終與if的右大括號在同一行。請閱讀有關(guān)此的規(guī)范。

  • time.Sleeptime.Duration其作為參數(shù),以納秒為單位。如果要休眠 2 秒鐘,請使用time.Sleep(2*time.Second).

  • for range 不需要推送。

  • 你的 forfor只是一遍又一遍地產(chǎn)生數(shù)百萬個 goroutine。Gooutintes 是輕量級的,但不是免費的。添加某種同步機制來控制您正在運行的 goroutine 數(shù)量。

是一個稍微好一點的版本。它有效,即使time.Sleep用作同步機制是您永遠不應(yīng)該做的事情。


查看完整回答
反對 回復(fù) 2021-08-16
?
DIEA

TA貢獻1820條經(jīng)驗 獲得超3個贊

(緩沖的)通道是一個隊列,而不是一個堆棧。因此,在這種情況下推和彈出沒有意義。

堆棧是 LIFO(后進先出),就像旅行行李一樣——你先把你需要的東西放在最后。隊列是 FIFO(先進先出),就像您將彈珠推過的管道。

在隊列的上下文中,你被稱為入隊和出隊元素。

考慮到所有這些,這就是我解釋你想要做的:

  • 創(chuàng)建一個緩沖通道(緩沖意味著它可以容納許多元素,有效地使其成為一個隊列)。

  • 然后用一堆隨機數(shù)填充它

  • 迭代它并再次僅將那些偶數(shù)加入隊列,向它們添加 1。

嘗試實現(xiàn)這個新算法。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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