使用两个Goroutine,向标准输出中按顺序按顺序交替打出字母与数字,输出是a1b2c3

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

使用两个Goroutine,向标准输出中按顺序按顺序交替打出字母与数字,输出是a1b2c3

要实现这个功能,我们需要两个 goroutine 之间的同步。Go 标准库中的 sync 包提供了多种同步原语,比如 sync.Mutexsync.WaitGroup 以及 sync.Cond 等,可以用来进行协程间的同步。然而,在这个特定案例中,使用 channel 来进行同步可能是最简单和最直观的方式。

下面是一个使用 channel 实现的示例代码:

package main

import (
	"fmt"
	"sync"
)

func main() {
   
   
	letter, number := make
go 实现数字字母交替打印并优雅关闭channel 这个效果其实有很多种写法,现在选取一个简单的写法,通常的写法是让两个协程交替打印,用chan来阻塞通知,但是由于大部分的demo都没有考虑优雅退出的问题,这次的demo添加了一个stopCha来优雅退出并close通道。 阅读详情

相关推荐

go面试题--使用两个goroutine交替打印数字字母

介绍了go中一道经典的面试题,使用两个goroutine交替打印数字字母

2301_78179333的博客 1200

使用两个goroutine交替顺序打印一段字符串的字符

1使用两个goroutine交替顺序打印一段字符串的字符。关键点:控制goroutine的执行先后循序。输入:hello world。输出:hello world。

关于代码的那些事 553

基于3goroutine交替顺序打印自然数

基于3goroutine交替顺序打印自然数

空山新雨后,天气晚来秋 2505

Go实现交替打印数字和字⺟

问题描述 使⽤两个 goroutine 交替打印序列,⼀个 goroutine 打印数字, 另外⼀个 goroutine 打印字⺟, 最终效果如下: 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728 解题思路 使⽤ channel 来控制打印的进度。使⽤两个 channel ,来分别控制数字和字⺟的打印序列, 数字打印完成后通过 channel 通知字⺟打印, 字⺟打印完成后通知数字打印,然后周⽽复始的

weixin_44336181的博客 576

Golang实战:使用 Goroutine 实现数字字母的交叉打印

在 Go 语言中,goroutine 是轻量级的并发执行单元,它使得我们能够非常方便地实现并发编程。本文将通过一个经典的案例 —— 使用两个 goroutine 交替打印数字字母,来演示如何利用 channel 控制 goroutine 的执行顺序,并加深对 Go 并发模型的理解。技术点应用场景说明Goroutine并发执行多个任务Channel协调 goroutine 之间的执行顺序goroutine 等待确保程序不会提前退出。

qq_44376306的博客 577

golang 交替打印字符串 面试题

题目内容: //使用两个 goroutine 交替打印序列, // 一个 goroutine 打印数字, // 另外一个 goroutine 打印字母, // 最终效果如下: // //12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728 waitgroup+2个channel 两个channel交替读取写入参数 package main import ( "fmt" "sync" ) //使..

厚积薄发的博客 828

GoLang】协程练习题

WaitGroup 对象内部有一个计数器,最初从0开始,它有三个方法:Add(),Done(),Wait()用来控制计数器的数量。Add(n)把计数器的值设置为n,Done() 每次把计数器的值 -1,wait()会阻塞代码的运行,直到计数器地值减为0。杆子抬起,输出数字,杆子落下。但是在本题中,channel的发送数量和接收数量都确定且相等,所以不会出现内存泄漏问题,故不关闭也行。的原则,杆子抬起表示从channel中取出数据,杆子落下表示无法从channel中取出数据(阻塞)。

2201_75692232的博客 735

go数字和字符交替打印的实现

package main import ( "fmt" "sync" ) func main() { var resultchan=make(chan interface{}) var signchan=make(chan struct{}) var chartArr=[]string{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}

司隶校尉博客 846

Golang_交替打印ABC\奇偶数\1-10\字母(并发编程)

建立三个线程A、B、C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC顺序打印

weixin_45440484的博客 715

2019年8月2

昨晚的笔试题 使用两个goroutine交替打印序列,一个goroutinue打印数字,另一个goroutine打印字母,最终结果如下: 12AB34CD56EF78GH910IJ 分析:问题核心是如何使两个协程顺序循环调用 使用阻塞channel交互控制 连续打印两个字符则是干扰项 package main import ( "fmt" ) func m...

weixin_30689307的博客 85

顿悟之旅:探索goroutine的堆栈编程

在实际应用中,我们可以根据需求创建多个goroutine,并使用适当的同步机制来保证数据的一致性和正确性。传统的操作系统线程不同,goroutine的创建和销毁开销非常小,因此可以轻松创建大量的goroutine。而在Go语言中,goroutine是一种轻量级的线程实现,为开发者提供了一种简单且高效的并发编程方式。关键字创建goroutine之外,Go语言还提供了丰富的并发原语和工具,如通道(channel)和互斥锁(mutex),以便更好地控制和同步goroutine之间的交互。然后,我们使用关键字。

2301_79326254的博客 78

Go语言笔记2

记录

weixin_43898670的博客 148

一段小程序浅析Go中的并发,协程(goroutine),sync.WaitGroup

package main import ( "fmt" "runtime" "sync" ) func main() { runtime.GOMAXPROCS(2) fmt.Println("begin typing") var wg sync.WaitGroup //defer wg.Done() wg.Add(2) go func() { defer wg.Done...

PengQ1的博客 1062

Go语言学习笔记(一)

Go语言学习整理 本文基于菜鸟教程,对于自己不明白的点加了点个人注解,对于已明确的点做了删除,可能结构不太清晰,看官们可移步Go语言教程 1 Go语言结构 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识...

暗焰之珩的博客 1万+

1 Go语言快速了解

本章将快速了解一下如下一些内容:1 . 为何要学 Go 语言2 . Go 语言有哪些比较显著的特点?3 . 如何编写优质的 Go 代码?

起初你是我的炼狱,最后我们相互修炼。 134

go语言基础

显示类型定义:const b string = "abc:"隐式类型变量:const b = "abc"批量定义:const a , b , c = v1 , v2 , v3函数体func : 函数由func 开始声明function_name:函数名称,参数列表和返回值构造了成了函数签名paramater_list :参数列表return_types: 返回值类型 //有些函数不需要返回值,不是必须的函数体:函数定义的代码聚合if a > b {return a。

2401_89049029的博客 181

Go / C / Python / Java 四语言对照学习总览

按统一维度横向对比四门语言的核心知识点,便于交叉记忆迁移学习。

2401_83227843的博客 824

Golang速通(Javaer版)——从基础语法到并发模型

这篇文章总结了Go语言的基础语法要点,包括: 变量和常量 变量类型需要显式转换 常量分为无类型常量和显式类型常量 使用iota实现枚举功能 控制流语句 if语句不需要括号,支持初始化语句 switch默认不穿透,需用fallthrough显式穿透 只有for循环,可省略条件变成"伪while"循环 复杂数据类型 切片(Slice)本质是结构体,传递高效 动态扩容策略:小容量翻倍,大容量平滑增长 切片是数组的视图,修改会影响原数组 哈希表(Map)的多种声明方式,nil map可读取但不

fancyfor的博客 397
上一篇: Kubernetes面经总结
下一篇: golang连接kafka示例
GOER&&
博客等级 码龄9年 104粉丝 · 13原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值