MST

星途 面试题库

面试题:Go语言中通道如何实现简单的并发任务同步

假设有两个并发函数,一个函数生成数字序列,另一个函数消费这些数字并打印。请使用Go语言通道实现这两个函数的同步,确保数字能按顺序被消费和打印。
23.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func producer(ch chan int) {
    for i := 1; i <= 10; i++ {
        ch <- i
    }
    close(ch)
}

func consumer(ch chan int) {
    for num := range ch {
        fmt.Println(num)
    }
}

func main() {
    ch := make(chan int)
    go producer(ch)
    consumer(ch)
}
  1. producer 函数
    • 该函数负责生成数字序列。它使用一个 for 循环从1到10,将每个数字通过通道 ch 发送出去。
    • 当数字发送完毕后,使用 close(ch) 关闭通道,这会通知所有从该通道接收数据的 for... range 循环结束。
  2. consumer 函数
    • 该函数通过 for... range 从通道 ch 接收数据。只要通道没有关闭且有数据,num 就会接收到从通道发送过来的数字并打印。
  3. main 函数
    • 创建一个整型通道 ch
    • 使用 go 关键字启动 producer 协程,使其在后台并发执行。
    • 调用 consumer 函数,开始消费和打印从通道接收的数字。这样就能确保数字按顺序被消费和打印。