1 回答

TA貢獻1757條經驗 獲得超7個贊
以下作品。我的意思是它不會死鎖。由于您在通道上的范圍循環中具有打印機功能,因此它會在通道關閉后自動停止。我在接近尾聲時添加了 3 秒延遲,以便讓 try 循環有時間打印。不過請閱讀文檔。它將 100% 解釋這些細節。
package main
import (
"fmt"
"sync"
"time"
)
func printAfterDelay(delay time.Duration, message string, wg *sync.WaitGroup) {
time.Sleep(delay)
fmt.Println(message)
}
func add(a int, b int, chan1 chan int, wg *sync.WaitGroup) {
c := a + b
chan1 <- c
wg.Done()
}
func printer(chan1 chan int, wg *sync.WaitGroup) {
for result := range chan1 {
fmt.Println(result)
}
}
func main() {
//var wg sync.WaitGroup
wg := &sync.WaitGroup{}
fmt.Println("Start...")
go printAfterDelay(2000*time.Millisecond, "Try", wg)
chan1 := make(chan int)
wg.Add(1)
go add(5, 4, chan1, wg)
wg.Add(1)
go add(3, 1, chan1, wg)
go printer(chan1, wg)
time.Sleep(3000 * time.Millisecond)
wg.Wait()
close(chan1)
fmt.Println("End")
}
- 1 回答
- 0 關注
- 177 瀏覽
添加回答
舉報