BetterNextTime
Senior Member
Bạn @weedvnz giải thích sai rồi.
- Ở ví dụ đầu tiên, main thread sẽ block đến khi nào channel done có output -> Sai, main thread block đến khi nào có nhận đc value đầu tiền từ done channel hoặc done channel bị closed.
- Deadlock là vì trong goroutine worker gửi 3 tới channel num mà không có receiver wait for message (num là unbuffered channel nên goroutine worker bị blocked, trong khi trong main thread thì bị blocked vì waiting for data from done channel, vì vậy mới ra deadlock (both threads are waiting for each other)
Code:
working...done
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]: <- receiver bị block
main.main()
/tmp/sandbox835183100/prog.go:24 +0xa5
goroutine 6 [chan send]: -> sender bị block
main.worker(0xc00005e060, 0xc00005e0c0)
/tmp/sandbox835183100/prog.go:13 +0xf8
created by main.main
/tmp/sandbox835183100/prog.go:22 +0x89
Program exited: status 2.