golang 并发控制 比如生产者消费者
时间: 2023-09-11 08:13:16 浏览: 201
在Go语言中,可以使用goroutine和channel来实现并发控制,例如生产者消费者模型。下面是一个简单的示例:
```go
package main
import (
"fmt"
"time"
)
func producer(ch chan<- int) {
for i := 1; i <= 10; i++ {
ch <- i
fmt.Printf("Produced: %d\n", i)
time.Sleep(time.Second) // 模拟生产过程
}
close(ch)
}
func consumer(ch <-chan int) {
for num := range ch {
fmt.Printf("Consumed: %d\n", num)
time.Sleep(time.Millisecond * 500) // 模拟消费过程
}
}
func main() {
ch := make(chan int)
go producer(ch)
go consumer(ch)
time.Sleep(time.Second * 15) // 等待足够长的时间以使生产者和消费者完成
fmt.Println("Done")
}
```
在上面的示例中,`producer`函数负责向通道发送数据,`consumer`函数负责从通道接收数据。通过使用`go`关键字,它们可以并发地运行。主函数中创建了一个通道,并启动了生产者和消费者的goroutine。最后,我们使用`time.Sleep`等待足够长的时间以使生产者和消费者完成。
请注意,在实际应用中,你可能需要更复杂的逻辑来处理并发控制、错误处理、退出信号等。这个示例只是一个简单的入门示例。
阅读全文