首页 > 其他分享 >协程的简单操作,你都知道哪些?Golang如何实现协程交替打印?

协程的简单操作,你都知道哪些?Golang如何实现协程交替打印?

时间:2022-11-02 23:02:52浏览次数:74  
标签:wg 协程 boolean fmt 打印 Golang num str


博主介绍:

– 我是了 凡 微信公众号【​​了凡银河系​​】期待你的关注。未来大家一起加油啊~


前言

对于并发的概念,我们都清楚为了合理利用CPU的执行效率,我们选择当一个事务或多个事务执行时交替执行对于当下的计算机执行是很快的并且是对用户无感的,所以我们往往采用极少的资源执行更多事情。假设目前需要执行两个协程,一个协程来执行字母,一个协程执行数字,让两个协程进行交替打印如何实现?又或者如何使用大量的多个协程来交替的执行从一数到五万这样的大任务呢?

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: ​​https://www.cbedai.net/lf​


文章目录

  • ​​前言​​
  • ​​公共变量​​
  • ​​协程打印数字​​
  • ​​协程打印字母​​
  • ​​所有代码​​

公共变量

对于下方的WaitGroup方法可以参考我之前写过的一篇文章

之后加入一个关键信号量(boolean)来控制同步问题,当然你也可以使用golang的管道来实现。

wg := sync.WaitGroup{}
wg.Add(2)
boolean := true
num, str := 1, 'A'
// 协程块
// ......
wg.Wait()

协程打印数字

go func() {
defer wg.Done()
for {
if boolean {
fmt.Print(num)
num++
fmt.Print(num)
num++
boolean = false
}
if num > 28 {
break
}
}
}()

协程打印字母

go func() {
defer wg.Done()
for {
if !boolean {
fmt.Print(string(str))
str++
fmt.Print(string(str))
str++
boolean = true
}
if str > 'Z' {
break
}
}
}()

所有代码

package main

import (
"fmt"
"sync"
)

func main() {
wg := sync.WaitGroup{}
wg.Add(2)
boolean := true
num, str := 1, 'A'
// 打印数字
go func() {
defer wg.Done()
for {
if boolean {
fmt.Print(num)
num++
fmt.Print(num)
num++
boolean = false
}
if num > 28 {
break
}
}
}()
// 打印字符
go func() {
defer wg.Done()
for {
if !boolean {
fmt.Print(string(str))
str++
fmt.Print(string(str))
str++
boolean = true
}
if str > 'Z' {
break
}
}
}()
wg.Wait()
}

创作不易,点个赞吧!
如果需要后续再看点个收藏!
如果对我的文章有兴趣给个关注!
如果有问题,可以关注公众号【了凡银河系】点击联系我私聊。



标签:wg,协程,boolean,fmt,打印,Golang,num,str
From: https://blog.51cto.com/u_14454410/5818449

相关文章

  • 我的Vue之旅 09 数据数据库表的存储与获取实现 Mysql + Golang
    第四期·将部分数据存储至Mysql,使用axios通过golang搭建的http服务器获取数据。新建数据库DROPDATABASEVUE;createdatabaseifnotexistsvue;usevue;JSONTO......
  • kotlin协程小记
    例子一:GlobalScope.launch(Dispatchers.Main){//开启子协程withContext(Dispatchers.IO){for(iin0until1000){}Log.d("Ma......
  • golang中的错误处理
    0.1、索引https://waterflow.link/articles/16667167272361、panic当我们执行panic的时候会结束下面的流程:packagemainimport"fmt"funcmain(){ fmt.Println("......
  • 批量打印与导出,皕杰报表新版本可打包输出报表
    为了满足批量输出报表功能,皕杰报表的最新版本中内置了一个批量处理的servlet(类名称:bios.report.engine.output.ReportBundler,映射名称:ReportBulker),其功能就是把多张报表捆扎......
  • Golang获取http Request内容
    获取httpRequest内容获取httpRequest的内容,需要io.ReadAll调用读取了request的Body,读取完后,我们的控制器就没有请求内容了,此时应该需要把读取出来的字节重新构造成一个R......
  • BM-27-之字形打印二叉树
    用两个栈来模拟队列,利用了一个栈倒叙一个栈正序的特点,注意压栈顺序也有改变就是感觉写出来代码有些重复vector<vector<int>>Print(TreeNode*pRoot){ vector<vector<......
  • 使用golang操作mongodb
    背景学习使用golang操作mongodb,主要是常见的增删改查。代码packagemainimport("context""fmt""log""go.mongodb.org/mongo-driver/bson"......
  • 优雅处理Golang中的异常
    我们在使用Golang时,不可避免会遇到异常情况的处理,与Java、Python等语言不同的是,Go中并没有try...catch...这样的语句块,我们知道在Java中使用try...catch...这种模式不仅能......
  • 剑指offer第二版-17打印从1到最大的n位数
    /***打印从1到最大的n位数*<p>*如输入2,打印1,2......98,99*注意:本题需要考虑大数问题,用字符串解决大数问题是最好的解决方案之一*用字符串表示数字的时候,最直观的......
  • C#-根据word页面内容打印每一页为PDF
    写的很一般,我没有学习过C#,就是拼拼凑凑来的。usingWord=Microsoft.Office.Interop.Word;usingSystem.Windows.Forms;usingMicrosoft.Office.Interop.Word;using......