Files
goLearn/note.md
2025-08-15 03:54:36 +08:00

31 lines
1.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
实现一个生产者-消费者模型,要求:
2 个生产者协程,每秒生成 1 个随机数0-100发送到 channel
3 个消费者协程,从 channel 读取并打印数据;
主协程在 5 秒后关闭 channel 并退出程序。
题目:增强版生产者-消费者模型(含 sync.Mutex和 sync.RWMutex应用
​​基础要求​​
​​生产者​​:
2 个协程,每秒生成 1 个随机数0-100发送到缓冲通道容量为 10
使用 sync.Mutex保护以下操作
记录每个数字的生成次数map[int]int
统计总生产数量int
​​消费者​​:
3 个协程从通道读取数据并打印格式消费者ID: 处理数据X (历史出现次数: Y)。
使用 sync.RWMutex保护对 map[int]int的读取查询历史次数写操作仍由 sync.Mutex保护。
​​主协程​​:
5 秒后关闭通道,等待所有协程退出。
程序退出前,打印最终统计数据:
总生产/消费次数
每个数字的出现频率(按频率降序排列)
​​进阶要求​​
​​性能优化​​:
消费者读取历史次数时,必须使用 RLock()允许多个消费者并发查询。
生产者更新 map和计数器时用最短的锁持有时间例如合并写锁操作
​​异常处理​​:
若通道已满,生产者需打印警告并丢弃数据。
消费者检测到通道关闭后立即退出,打印退出日志。
​​扩展功能​​(可选):
添加一个监控协程,每秒打印当前最频繁生成的 3 个数字(需使用 RWMutex读取数据