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个协程交替打印奇偶数

相关推荐
归去来 兮10 分钟前
Python爬虫爬取数据案例
开发语言·爬虫·python
ShineWinsu12 分钟前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
ly768912 分钟前
C 语言从入门到进阶:语法、指针、内存管理与工程实践详解
c语言·开发语言
纪念 22915 分钟前
算法二叉树(一)
算法
quantdash_cc30 分钟前
历史数据断层与REST请求慢到崩溃?QuantDash高性能量化数据API终极解决方案
开发语言·python·缓存·php·量化·quantdash
breeze jiang30 分钟前
Next.js 16 App Router 实战:从 About、Blog 动态路由到全局 404
开发语言·javascript·ecmascript
熊野君34 分钟前
Prompt / RAG / 规则 / Skills —— 定位、协作与实现路线
开发语言·python
liulilittle40 分钟前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
山甫aa1 小时前
JavaWeb后端开发学习手册
java·开发语言·数据库·学习·mysql·springboot·web