操作系统实验三:生产者——消费者问题
一、基本信息
xxx 711103xx 2012 年 4 月 29 日
二、实验目的
通过实验,掌握 Windows 和 Linux 环境下互斥锁和信号量的实现方法,加深
对临界区问题和进程同步机制的理解,同时巩固利用 Windows API 和 Pthread
API 进行多线程编程的方法。
三、实验内容
1. 在 Windows 操作系统上,利用 Win32 API 提供的信号量机制,编写应用
程序实现生产者——消费者问题。
2. 在 Linux 操作系统上,利用 Pthread API 提供的信号量机制,编写应用
程序实现生产者——消费者问题。
3. 两种环境下,生产者和消费者均作为独立线程,并通过 empty、full、mutex
三个信号量实现对缓冲进行插入与删除。
4. 通过打印缓冲区中的内容至屏幕,来验证应用程序的正确性。
四、实验步骤
1. 创建 3 个信号量:Mutex、Full、Empty
2. 主程序创建 10 个生产者线程和 10 个消费者线程,之后休眠一段时间
3. 生产者线程中,休息一段 2s 后,生产一个 0~10 的随机数放入缓冲区里。
利用信号量 Mutex 产生对缓冲区使用的互斥功能,利用 Empty 和 Full 信号量来
对缓冲区进行增加项
4. 消费者线程中,休息 4s 时间后,消费一个缓冲区的数据。利用信号量
Mutex 产生对缓冲区使用的互斥功能,利用 Empty 和 Full 信号量来对缓冲区进
行增加项
5. 主程序执行一段时间后,结束整个程序
五、主要数据结构及其说明
产品数量最大值
const int MAX_SIZE = 10;
缓冲区:
int buffer[BUFFER_SIZE];
int front; int rear; bool full;
三个互斥信号量:
HANDLE Mutex; HANDLE Full; HANDLE Empty;
有关操作:
用 WaitForSingleSignal 函数可以获得一个 Mutex 的所有权,类似于