006 Golang-channel-practice 并发打印字符串

这篇具有很好参考价值的文章主要介绍了006 Golang-channel-practice 并发打印字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用两个goroutine,向标准输出中按顺序交替打印出字母和数字,输出是a1b2c3...

这里我们使用两个channel保证它们打印的顺序。

使用两个通道(channel)是确保打印顺序的一个有效方法,尤其是在涉及到交替执行的并发任务时。在我们的场景中,目标是让两个 goroutine 交替执行并打印字符和数字。使用两个通道可以精确地控制它们的执行顺序。

func main() {
	var wg sync.WaitGroup
	charChan := make(chan struct{}, 1)
	numChan := make(chan struct{}, 1)

	wg.Add(2)
	go printCharacters(charChan, numChan, &wg)
	go printNumbers(numChan, charChan, &wg)

	charChan <- struct{}{} // 开始打印字符
	wg.Wait()              // 等待两个goroutine完成
}

func printCharacters(charChan, numChan chan struct{}, wg *sync.WaitGroup) {
	defer wg.Done()
	for char := 'a'; char <= 'z'; char++ {
		<-charChan
		fmt.Printf("%c", char)
		numChan <- struct{}{}
	}
}

func printNumbers(numChan, charChan chan struct{}, wg *sync.WaitGroup) {
	defer wg.Done()
	for i := 1; i <= 26; i++ {
		<-numChan
		fmt.Print(i)
		charChan <- struct{}{}
	}
}

 文章来源地址https://www.toymoban.com/news/detail-802330.html

 

到了这里,关于006 Golang-channel-practice 并发打印字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Golang Channel详解:安全并发通信与避免死锁方法

    深入了解Golang中的Channel,探讨其线程安全性、类型特性以及避免死锁的方法。学习如何正确初始化、存取数据,关闭Channel以及处理只读只写情况。

    2024年02月10日
    浏览(51)
  • Golang中的管道(channel) 、goroutine与channel实现并发、单向管道、select多路复用以及goroutine panic处理

    目录 管道(channel) 无缓冲管道 有缓冲管道 需要注意 goroutine与channel实现并发 单向管道 定义单向管道 将双向管道转换为单向管道 单向管道作为函数参数 单向管道的代码示例 select多路复用 案例演示 goroutine panic处理 案例演示 管道(channel)是 Go 语言中实现并发的一种方式,

    2024年02月06日
    浏览(47)
  • golang发送get请求的各种操作:自定义header请求头、带cookie请求、channel并发请求

    请求参数放到url.Values{} 接收文件–ioutil.WriteFile 接收文件–io.Copy

    2024年02月06日
    浏览(47)
  • golang channel

    channel是不同协程之间异步通信的数据结构。 1 构造 2 读操作 3 写 4 关闭 5 多路复用 实现对多个channel同时监听 三个核心: 1 并发读写安全,需要锁 2 环形缓冲区(数组+头尾指针),好处是复用数组空间,同时保证内存地址连续 3 承载阻塞goroutine的队列 hchan:channel数据结构

    2024年02月11日
    浏览(39)
  • golang学习-channel管道

    1、定义 管道是golang语言提供的goroutine间的通讯方式,channel可以让一个goroutine发送特定的值给另一个goroutine的通讯机制。 管道是引用类型。 golang语言中channel是一种特殊的类型。像一个队列一样,先进先出。 var 变量 chan 元素类型 var ch1 chan int //声明一个传递整型的管道 var

    2024年01月19日
    浏览(50)
  • Golang之Channel详细介绍

    一、概述 通道(Channel)是 Golang 在语言级别上提供的 goroutine 间的通讯方式,可以使用channel在多个 goroutine 之间传递消息。如果说 goroutine 是 Go 程序并发的执行体,channel 就是它们之间的连接。channel 是可以让一个 goroutine 发送特定值到另一个 goroutine 的通信机制。 Golang 的并发

    2024年02月12日
    浏览(36)
  • Golang开发--channel的使用

    在 Go 语言中,channel(通道)是一种用于在 goroutine 之间进行通信和同步的并发原语。它提供了一种安全且简单的方式来传递数据。 1.定义通道: 通道是通过使用 make 函数来创建的。通道有特定的类型,用于指定通道中传输的数据的类型。例如,ch := make(chan int) 创建了一个整

    2024年02月09日
    浏览(46)
  • go并发 - channel

    并发编程是利用多核心能力,提升程序性能,而多线程之间需要相互协作、共享资源、线程安全等。任何并发模型都要解决线程间通讯问题,毫不夸张的说线程通讯是并发编程的主要问题。 go 使用著名的CSP(Communicating Sequential Process,通讯顺序进程)并发模型,从设计之初

    2024年02月05日
    浏览(56)
  • channel并发编程

    不要通过共享内存通信,要通过通信共享内存。 channel是golang并发编程中一种重要的数据结构,用于多个goroutine之间进行通信。 我们通常可以把channel想象成一个传送带,将goroutine想象成传送带周边的人,一个传送带的上游放上物品,通过传送带的传输,下游的人可以将物品取

    2024年02月11日
    浏览(33)
  • golang channel执行原理与代码分析

    使用的go版本为 go1.21.2 首先我们写一个简单的chan调度代码 因为ch的数据获取方式有两种,所以这个示例代码写了两次的ch读与写 老样子通过go build -gcflags -S main.go获取到对应的汇编代码 调度make最终被转换为CALL runtime.makechan 调度ch - struct{}{}最终被转换为CALL runtime.chansend1 由于我

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包