1 Star 0 Fork 3

Admin/golang-study

forked from gaozhichang/golang-study 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
two_goroutine_print.go 1.18 KB
一键复制 编辑 原始数据 按行查看 历史
gaozhichang 提交于 2024-03-01 14:06 . 协程交替打印数字
// Package main
/*
@Time : 2024/2/29 21:01
@File : two_goroutine_print_100.go
@des: GoLand
*/
package main
import (
"fmt"
"sync"
)
func main() {
// oneThread()
twoTread()
}
/*
*
无缓冲
1、定义时若未指定缓冲大小或设置为0,表示当前chan无缓冲。
2、在向chan写入数据时,会阻塞当前协程,直到其他协程从该chan中读取了数据。
3、基于定义2规则,无缓冲chan不能在一个协程同时进行读取与写入操作。
*/
func twoTread() {
exit := make(chan bool)
lock1 := make(chan int) // 这里用无缓冲,会阻塞写入
lock2 := make(chan int)
print100 := func(in, out chan int) {
for {
select {
case i := <-in:
fmt.Println(i)
i++
if i > 100 {
exit <- true
return
}
out <- i
}
}
}
go print100(lock1, lock2)
go print100(lock2, lock1)
lock1 <- 1 // 这个放到协程上面,如果无缓冲,会阻塞
fmt.Println("--start ---")
<-exit
}
func oneThread() {
mu := sync.Mutex{}
out := make(chan int)
for i := 0; i < 100; i++ {
mu.Lock()
go func(i int) {
defer mu.Unlock()
fmt.Println(i)
if i == 99 {
out <- 1
}
}(i)
}
<-out
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/chenweichu_1_0/golang-study.git
[email protected]:chenweichu_1_0/golang-study.git
chenweichu_1_0
golang-study
golang-study
main

搜索帮助