Go|腾讯面经总结

文章目录

用goroutine交替输出abc和123

  • 使用两个无缓冲 channel 来实现 goroutine 之间的交替通知。
  • 一个 channel 控制字母 goroutine,另一个 channel 控制数字 goroutine。
  • 每个 goroutine 在输出前先阻塞等待自己的 channel,输出完成后再向另一个 channel 发送信号,把执行权交给对方。
  • 主 goroutine 先向字母 channel 发送一个初始信号,从而启动整个交替流程。
  • 由于无缓冲 channel 的发送和接收具有同步阻塞特性,所以可以保证两个 goroutine 严格按照 a1b2c3 的顺序输出。
go 复制代码
package main

import (
	"fmt"
	"sync"
)

func main() {
	letters := []rune("abc")
	numbers := []rune("123")

	letterCh := make(chan struct{})
	numberCh := make(chan struct{})

	var wg sync.WaitGroup
	wg.Add(2)

	go func() {
		defer wg.Done()

		for i, ch := range letters {
			<-letterCh
			fmt.Print(string(ch))

			if i < len(numbers) {
				numberCh <- struct{}{}
			}
		}
	}()

	go func() {
		defer wg.Done()

		for i, ch := range numbers {
			<-numberCh
			fmt.Print(string(ch))

			if i+1 < len(letters) {
				letterCh <- struct{}{}
			}
		}
	}()

	letterCh <- struct{}{}

	wg.Wait()
	fmt.Println()
}
相关推荐
free-elcmacom几秒前
C++学习<1>程序分区
开发语言·c++
醉颜凉7 分钟前
Java 必看:如何彻底避免 HashMap 多线程死循环问题?
java·开发语言
默 语9 分钟前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
SelectDB11 分钟前
某头部保险公司基于 SelectDB 的统一 OLAP 架构实践
后端
Brilliantwxx35 分钟前
【STM32】 I2C_EEPROM_test 工程(实战篇)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
ServBay37 分钟前
ServBay 1.33.0 来了:AI Gateway 一键接管主流 AI CLI 与多模型
后端·aigc·ai编程
行者全栈架构师38 分钟前
Spring Boot 接入 MaxKey 单点登录:6 个内部系统,一次登录全通行
java·vue.js·后端
清水白石00840 分钟前
Python 异步编程深度解析:Cancellation 到底是异常还是控制信号?从 asyncio 取消机制到企业级事务设计最佳实践
开发语言·python
JuiceFS41 分钟前
卓驭:百 PB 级智驾数据存储架构演进
后端·自动驾驶
鱼弦43 分钟前
跨模态迁移的极限:语言模型的逻辑能力能否完全迁移到视觉?
后端