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

博主介绍:

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


前言

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

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


公共变量

对于下方的WaitGroup方法可以参考我之前写过的一篇文章:https://blog.csdn.net/weixin_45765795/article/details/121185893

之后加入一个关键信号量(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()
}


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