1 回答

TA貢獻1836條經驗 獲得超13個贊
它有效,但通常是個壞主意(tm)
你未來的軟件維護者會因此討厭你
請注意,如果這些循環不完全相同,那么當主 goroutine 由于沒有其他人寫入或讀取而阻塞時,應用程序將崩潰
package main
import (
? ? "fmt"
)
func main() {
? ? c := make(chan int)
? ? go func() {
? ? ? ? for x := 0; x < 5; x++ {
? ? ? ? ? ? var i int
? ? ? ? ? ? select {
? ? ? ? ? ? case c <- 1:
? ? ? ? ? ? ? ? i = <-c
? ? ? ? ? ? case i = <-c:
? ? ? ? ? ? ? ? c <- 1
? ? ? ? ? ? }
? ? ? ? ? ? fmt.Println(" A - Written 1 red ", i)
? ? ? ? }
? ? }()
? ? for x := 0; x < 5; x++ {
? ? ? ? var i int
? ? ? ? select {
? ? ? ? case c <- 2:
? ? ? ? ? ? i = <-c
? ? ? ? case i = <-c:
? ? ? ? ? ? c <- 2
? ? ? ? }
? ? ? ? fmt.Println(" B - Written 2 red ", i)
? ? }
}
輸出:
?B - Written 2 red? 1
?A - Written 1 red? 2
?B - Written 2 red? 1
?A - Written 1 red? 2
?B - Written 2 red? 1
?A - Written 1 red? 2
?B - Written 2 red? 1
?A - Written 1 red? 2
?B - Written 2 red? 1
Program exited.
- 1 回答
- 0 關注
- 138 瀏覽
添加回答
舉報