diff --git a/note.md b/note.md new file mode 100644 index 0000000..c5baa8b --- /dev/null +++ b/note.md @@ -0,0 +1,31 @@ +实现一个生产者-消费者模型,要求: + +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读取数据)。 \ No newline at end of file