golang实现奇数偶数交替输出(生产者消费者模型)

golang 面试题(十)协程交替打印奇偶数 问题: 两个协程交替打印1-100的奇偶数,一个协程打印奇数,一个协程打印偶数。 代码1: package main import ( "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打印:",. 阅读详情

作业题如下:

假设存在一个生产者,依次产生数字09。存在一个奇数消费者,一个偶数消费者分别使用奇数和偶数,使用Go语言通道实现这个生产者消费者模型的代码如下:

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func producer(odd chan<- int, even chan<- int) {
	defer wg.Done()
	for i := 0; i < 10; i++ {
		if i%2 == 0 {
			even <- i
		} else {
			odd <- i
		}
	}
	close(odd)
	close(even)
}

func oddConsumer(odd <-chan int) {
	defer wg.Done()
	for {
		value, ok := <-odd
		if !ok {
			fmt.Println("Consumer odd, work done")
			return
		}
		fmt.Printf("Consumer odd, get value %d\n", value)
	}
}

func evenConsumer(even <-chan int) {
	defer wg.Done()
	for {
		value, ok := <-even
		if !ok {
			fmt.Println("Consumer even, work done")
			return
		}
		fmt.Printf("Consumer e
Golang 面试题 (1) 用协程交替打印奇偶数 Golang 面试题 (1) 用协程交替打印奇偶数 面试神策数据时,有被问到,答得不太好,记录一下 方法1 两个G,分别打印奇数偶数 无缓冲channel通知这两个G,控制打印顺序 var flagChan=make(chan int) func wokr1(){ for i:=1;i<=100;i++{ flagChan <- 1 //塞入 if i%2==1{ ... 阅读详情

相关推荐

深入IR2104数据手册:被忽略的SD引脚用法和死区时间调节实战

本文深入解析IR2104半桥驱动芯片的SD引脚用法和死区时间调节技巧,帮助硬件工程师优化电机控制和电源转换系统。通过详细的电路设计、实测数据和调试方法,揭示SD引脚的多重保护机制和死区时间的精密调节策略,提升系统安全性和效率。

weixin_30342363的博客 341

golang流程控制总结

go语言中的流程控制 本文视频教程地址:https://www.bilibili.com/video/BV1zR4y1t7Wj?from=search&seid=12495842889998176802&spm_id_from=333.337.0.0 go语言中的条件 条件语句是用来判断给定的条件是否满足(表达式值是否为true或者false),并根据判断的结果(真或假)决定执行的语句,go语言中的条件语句也是这样的。 go语言中的条件语句包含如下几种情况 if 语句:if 语句 由一个布

geek99_guo的博客 692

无法获得下列放可solidworks standard 无法连接到服务器-15,10,10061如何解决?

无法获得下列放可solidworks standard 无法连接到服务器-15,10,10061如何解决?

qq_63539957的博客 2万+

Golang多协程利用chan交替打印奇数偶数

Golang多协程(goroutine)利用chan交替打印奇数偶数

即心即佛 2271

golang函数作为类型例子———数组中分离奇偶数

定义一个函数类型,实现定义的函数类型,作为参数调用 package main import "fmt" //函数作为数据类型 type myFunc func(arr int) bool func main() { arr := []int{1,6,7,21,23,33,34,456,76,89,97,31,16,17,29} odd := Filter(arr,isOdd) fm...

TigerwolfC的博客 1453

Golang面试题: 两个goroutine交替打印1-100之间的奇数偶数

文章目录题目介绍做法一做法二做法三 开心一刻        一个国王要替公主征婚,把一个苹果放在公主头上,谁要把它射中就有机会迎娶公主。        第一个男士把苹果射中,他说:“I’m 罗宾。”        第二个男士也把苹果射中,他说:“I’m 后羿。”        第三个男士不小心把公主射死了,他说:“ I’m sorry…" 题目介绍

xingyu97的博客 4506

Go 生产者-消费者交替输出奇数偶数(通过接力棒协作)

初始程序 使用 Go 的 channel 协程可以很方便的写一个输出奇数偶数生产者-消费者程序,示例程序如下: package main import ( "fmt" "sync" ) func producer(odd chan<- int, even chan<- int) { defer wg.Done() for i := 0; i < 10; i++ { if i%2 == 0 { even <- i } else { odd <-

每一个不曾起舞的日子,都是对人生的辜负。 1129

Go中按次序交替打印1212...,你知道它背后的设计模式吗

聊聊后端面试那些事 让你goroutine交替打印1212...首先这道题看似是两个goroutine交替打印,实则是有很多细节需要考虑,而且背后的设计模式就是生产者消费者模式。代码演示下简单的生产者消费者模式:package main import "fmt" func main() {  done := make(chan bool) //控制结束退出的信号  ch := mak.

stackfuture的博客 372

Goroutine交替执行的相关问题与方法

多个Goroutine交替执行输出 文章目录多个Goroutine交替执行输出两个协程交替打印1-100的奇偶数使用channel作为信号传递实现使用runtime让协程竞争CPU使用sync的锁竞争实现N个线程交替打印0-100没有严格的交替顺序的时候有严格交替顺序的时候channel实现线程池参考资料 Go语言的协程goroutine在高并发方面具有优势,最简单的可以写一个简单的生产者消费者模型。 func mode1() { rand.Seed(time.Now().UnixNano()) wg

m0_60647847的博客 1903

生产者消费者拓展问题 (操作系统好难(づ╥﹏╥)

1.奇偶打印问题 三个进程R、W1、W2共享一缓冲器B,而B中一次只能存放一个数。R将从输入设备上读入的数放到缓冲器B中。若存放的是奇数,则允许W1将其取出打印,如果是偶数,由进程W2取出打印,试用PV操作和信号量来描述他们之间的同步关系。 --------------------------------------------------- Begin B:integer; S,...

qq_43813697的博客 1006

golang编程题1

1、开启100个协程,顺序打印1-1000,并保证协程号为1的,打印尾数也是1。

qq_28090573的博客 199

GoGo并发编程基础详解

介绍了Go语言当中并发编程基础知识,比如进程线程协程的区别、Goroutine基础使用、WaitGroup、Mutex等锁的使用、channel的基本使用、底层结构,最后基于channel实现生产者消费者模型代码

weixin_62533201的博客 851

Golang 语言 Channel 的使用方式

channel

As_wind_的博客 548

GoLang 使用 RabbitMQ 优先级队列

1. RabbitMQ优先级队列介绍: RabbitMQ3.5.0之后官方版本已经实现了优先级队列。数值越大则优先级越高。 创建优先级队列,需要增加x-max-priority参数,指定一个优先级的数值大小,这里最好是0~10之间,用来表示这个queue的最大优先级。(备注:因为生产者消费者都需要对queue进行声明,所以它们都需要设置这个参数) 生产者在发送消息的时候,需要设置priority属性,最好不要超过上面指定的最大的优先级,一旦超过了这个优先级,发送设置的优先级就不再生效了。在这个范围内

JineD的博客 517

Go之RabbitMQ()优先级队列

1. RabbitMQ优先级队列介绍:RabbitMQ3.5.0之后官方版本已经实现了优先级队列。数值越大则优先级越高。创建优先级队列,需要增加x-max-priority参数,指定一个...

zhghost的专栏 766

golang】n个协程交替执行

思路:将协程编号为[0,n-1]。创建n个锁,分别对应[0,n-1],初始化时将所有锁上锁,之后启动n个协程,对于每个协程,需要先获取自身对应的锁,获取到执行完后解放下一个协程的锁。最后别忘记启动完n个协程后将第0个锁解锁,否则这n个协程就死锁了。

yqs的博客 347

golang交替输出字符串

朋友问了一道使用通道来实现“多线程”通讯的golang题,我看了下,还比较简单。 但由于这个对理解golang之间利用通道通讯有一定的帮助,所以写下如下代码,发出来给大家看看。 思路简要: 最开始需要用一个带缓存的通道来触发开始操作,否则会引起死锁。然后用两个通道不断的交替进行接收与发送 package main /** 用三个线程,交替输出abc,abc,abc... */ import (...

qianggezhishen的专栏 815

goroutine交替打印1-20内的奇偶数

goroutine交替打印1-20内的奇偶数

weixin_46529397的博客 240

go 使用channel交叉打印奇偶数

使用两个协程一个管道,一个协程输入,另一个协程接收,保证i在两个协程中的值一样。

秋叶原的黑猫的博客 388

生产者消费者模式实现奇数偶数不同线程交替输出

要求 使用生产者消费者模式实现交替输出: 假设只有两个线程,输出以下结果: t1-->1 t2-->2 t1-->3 t2-->4 t1-->5 t2-->6 .... 要求:必须交替,并且t1线程负责输出奇数。t2线程负责输出偶数。 两个线程共享一个数字,每个线程执行时都要对这个数字进行:++ 代码 public class Test { public static void main(String[] args) {

Xue_fabulous的博客 677

Simulink半桥LLC谐振仿真

《Simulink半桥LLC谐振仿真》资源专注于半桥LLC谐振变换器的设计与仿真,为用户提供了一个通过Simulink进行高效电源转换的工具。该资源适用于工程师和研究人员,尤其是在电力电子领域工作的专业人士,帮助他们了解和应用这一重要技术。该模型采用Simulink仿真平台,详细展示了半桥LLC谐振变换器的工作原理及设计方法。半桥LLC谐振变换器因其高效率、低开关损耗和较高的功率密度,在现代电力电子系统中得到了广泛应用。其独特的拓扑结构使其在电源转换中的性能优越,适合于多种高频和高效的电源应用场景。资源中的仿真模型结构清晰,用户可以方便地进行参数调整和仿真操作。通过Simulink仿真,用户能够直观地观察电路的动态响应和稳态特性,从而优化设计,提升系统性能。具体内容包括:半桥LLC谐振变换器的工作原理:详细解释了LLC谐振变换器的拓扑结构和工作模式,帮助用户理解其在高频电源转换中的应用。为电力电子领域的研究和应用提供有力支持。通过深入学习和使用该仿真模型,用户能够更好地理解和掌握电源转换技术的核心原理和应用技

上一篇: Activity和Service的区别
下一篇: [Unity]操作某一对象后关闭再打开初始化
CCChris_
博客等级 码龄10年 0粉丝 4原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值