写入缓冲通道超过其容量
writing to buffer channel more than its capacity
覆盖缓冲区通道超过其容量有什么影响吗?
因为还有另一个 go routine 并且 main go routine 没有加入它所以这里没有死锁
package main
import "fmt"
func main() {
ch := make(chan int, 2)
go func (){
ch <- 1
ch <- 2
ch <- 4//blocks here but scheduler picked up another go routine
ch <- 6
ch <- 10
//close(ch)
}()
fmt.Println(<-ch)
fmt.Println(<-ch)
//for v:=range ch{
//fmt.Println(<-ch)//1 2 4 6 10
//}
}
because of that no deadlock here
A go build -race .
确实不会检测到竞争条件。
但是没有死锁的主要原因是主函数在第二个fmt.Println(<-ch)
后退出。
即使匿名 goroutine 在 ch <- 4
上被阻塞,所有程序仍然会停止。
覆盖缓冲区通道超过其容量有什么影响吗?
因为还有另一个 go routine 并且 main go routine 没有加入它所以这里没有死锁
package main
import "fmt"
func main() {
ch := make(chan int, 2)
go func (){
ch <- 1
ch <- 2
ch <- 4//blocks here but scheduler picked up another go routine
ch <- 6
ch <- 10
//close(ch)
}()
fmt.Println(<-ch)
fmt.Println(<-ch)
//for v:=range ch{
//fmt.Println(<-ch)//1 2 4 6 10
//}
}
because of that no deadlock here
A go build -race .
确实不会检测到竞争条件。
但是没有死锁的主要原因是主函数在第二个fmt.Println(<-ch)
后退出。
即使匿名 goroutine 在 ch <- 4
上被阻塞,所有程序仍然会停止。