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

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

與并發(fā)功能不一致的結(jié)果?

與并發(fā)功能不一致的結(jié)果?

Go
茅侃侃 2023-03-29 16:06:41
我正在嘗試同時(shí)處理文件中的行,但出于某種原因,我似乎得到了不一致的結(jié)果。我的代碼的簡化版本如下:  var wg sync.WaitGroup  semaphore := make(chan struct{}, 2)  lengths:= []int{}  for _, file := range(args[1:]){    // Open the file and start reading it    reader, err := os.Open(file)    if err != nil {      fmt.Println("Problem reading input file:", file)      fmt.Println("Error:", err)      os.Exit(0)    }    scanner := bufio.NewScanner(reader)    // Start streaming lines    for scanner.Scan() {      wg.Add(1)      text := scanner.Text()      semaphore <- struct{}{}      go func(line string) {          length := getInformation(line)          lengths = append(lengths, length)          <-semaphore          wg.Done()      }(text)    }  }  wg.Wait()  sort.Ints(lengths)  fmt.Println("Lengths:", lengths)該getInformation函數(shù)只是返回行的長度。然后我把那條線添加到一個(gè)數(shù)組中。我遇到的問題是,當(dāng)我對同一個(gè)文件多次運(yùn)行時(shí),我在數(shù)組中得到了不同數(shù)量的項(xiàng)目。我曾假設(shè),因?yàn)槲沂褂玫膚aitGroup是每次都會(huì)處理所有行,因此內(nèi)容lengths是相同的,但事實(shí)并非如此。誰能看到我在這里做錯(cuò)了什么?
查看完整描述

1 回答

?
ITMISS

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

正在lengths = append(lengths, length)同時(shí)執(zhí)行。這是不安全的,會(huì)導(dǎo)致切片丟失條目等問題。您可以通過將追加調(diào)用包裝在互斥鎖中來解決此問題,或者讓 gorountines 將它們的結(jié)果發(fā)布到一個(gè)通道并有一個(gè)地方將它們收集到一個(gè)切片中。



查看完整回答
反對 回復(fù) 2023-03-29
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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