golang channle阻塞

时间:2023-03-10 06:51:35
golang channle阻塞

当一个channle容量写满时,会出现阻塞状态

package main

func main() {

	var c1 = make(chan int, 10)

	for i := 0; i < 10; i++ {
c1 <- i
} c1 <- 10
}

golang channle阻塞

当channle写满时,并且有往外读的情况下,channle会一直阻塞至有读出为止,而后再向channle中写入

package main

import (
"fmt"
"time"
) func readChan(inchan chan int, exitchan chan bool) {
for {
time.Sleep(time.Millisecond * 500)
res, ok := <-inchan
if !ok {
break
}
fmt.Printf("读取%d\n", res)
}
exitchan <- true
close(exitchan)
} func writeChan(inchan chan int) {
for i := 1; i <= 50; i++ {
inchan <- i
fmt.Printf("写入%d\n", i)
}
close(inchan)
}
func main() {
inchan := make(chan int, 10)
exitchan := make(chan bool, 1) go writeChan(inchan)
go readChan(inchan, exitchan) for {
_, ok := <-exitchan
if !ok {
break
}
}
}

golang channle阻塞