golang编程题

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

Go 复制代码
package main

import "fmt"

const (
	routineNum = 100
	numMax     = 1000
)

func main() {
	s := make(chan struct{})
	channels := make(map[int]chan int, 100)
	for i := 1; i <= routineNum; i++ {
		channels[i] = make(chan int)
	}
	for i := 1; i <= routineNum; i++ {
		go func(idx int) {
			for {
				num := <-channels[idx]
				fmt.Printf("chan id:[%d],num:[%d]\n", idx, num)
				s <- struct{}{}
			}

		}(i)
	}

	for j := 1; j <= numMax; j++ {
		idx := j % routineNum //0~99
		if idx == 0 {
			idx = routineNum
		}
		channels[idx] <- j
		<-s
	}
	return
}

2、3个goroutinue交替打印abc10次

Go 复制代码
package main

import (
	"fmt"
	"sync"
)

func main() {
	chan1 := make(chan struct{})
	chan2 := make(chan struct{})
	chan3 := make(chan struct{})
	var wg sync.WaitGroup
	wg.Add(3)

	go func() {
		defer wg.Done()
		for i := 0; i < 10; i++ {
			<-chan1
			fmt.Println("a")
			chan2 <- struct{}{}
		}
		<-chan1
	}()
	go func() {
		defer wg.Done()

		for i := 0; i < 10; i++ {
			<-chan2
			fmt.Println("b")
			chan3 <- struct{}{}
		}

	}()
	go func() {
		defer wg.Done()

		for i := 0; i < 10; i++ {
			<-chan3
			fmt.Println("c")
			chan1 <- struct{}{}
		}
	}()
	chan1 <- struct{}{}
	wg.Wait()

	close(chan1)
	close(chan2)
	close(chan3)
}

3、用不超过10个goroutinue打印不重复的打印slice中100个元素

4、用2个协程交替打印奇偶数

相关推荐
ZhengEnCi11 分钟前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
龙亘川20 分钟前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人25 分钟前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David1 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1001 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
Pniubi1 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6181 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang1 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
专注仿真2 小时前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
jimy12 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++