问题:
两个协程交替打印1-100的奇偶数,一个协程打印奇数,一个协程打印偶数。
【go|golang 面试题(十)协程交替打印奇偶数】代码1:
package mainimport (
"fmt"
"runtime"
"time"
)func main() {
//设置可同时使用的CPU核数为1
runtime.GOMAXPROCS(1)
go func() {
for i := 1;
i < 101;
i++ {
//奇数
if i%2 == 1 {
fmt.Println("线程1打印:",i)
}
//让出cpu
runtime.Gosched()
}
}()
go func() {
for i := 1;
i < 101;
i++ {
//偶数
if i%2 == 0 {
fmt.Println("线程2打印:",i)
}
//让出cpu
runtime.Gosched()
}
}()
time.Sleep(3 * time.Second)
}
代码2:使用channel
package mainimport (
"fmt"
"time"
)func main() {
c := make(chan int)
go func() {
for i := 1;
i < 101;
i++ {
c <- 1
//奇数
if i%2 == 1 {
fmt.Println("线程1打印:",i)
}
}
}()
go func() {
for i := 1;
i < 101;
i++ {
<- c
//偶数
if i%2 == 0 {
fmt.Println("线程2打印:",i)
}
}
}()
time.Sleep(3 * time.Second)
}
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- linux笔记|linux 常用命令汇总(面向面试)
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 面试|我经历的IT公司面试及离职感受(转)
- android-面试|我经历的IT公司面试及离职感受
- Java|一个月内面了30家企业,不断对比薪资,我从18K变成了38K
- vue|Vue面试常用详细总结
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Android|年后备战金三银四(Android面试吃透这一篇就没有拿不到的offer......)
- Go|Docker后端部署详解(Go+Nginx)