-
操作系统”课程中的生产者-消费者问题通过VC++6.0得以实现
资源介绍
一、原理
生产者线程:
while (true)
生产
wait(empty)
wait(mutex)
将产品放入队列
signal(mutex)
signal(full)
end while
消费者线程:
while (true)
wait(full)
wait(mutex)
从队列中取出产品
signal(mutex)
signal(empty)
消费
end while
信号量full表示可消费的产品数量,empty代表空单元的数量(用于容纳新生产的产品),mutex用于互斥地访问产品队列。wait操作对应于P原语,表示可用资源数量<=0时,请求线程处于等待状态(线程阻塞);signal操作对应于V原语,表示释放可用资源,使得等待相同资源的线程进入就绪队列。
产品队列使用循环队列表示,设有rear和front指针,从rear指向的单元放入产品(入队),从front指向的单元取出产品消费(出队)。
二、具体实现
1. 信号量操作用Win32 API函数完成
(1)创建信号量:CreateSemaphore
(2)wait操作:WaitForSingleObject
(3)signal操作:ReleaseSemaphore
2. 线程操作使用MFC全局函数:
(1)创建线程:AfxBeginThread
(2)撤销线程:AfxEndThread
生产和消费在视图上以绘制饼图的方式展现。可以选择菜单项“开启线程->加快(减慢)生产,减慢(加快)消费”来随机调整生产和消费的时间,以观察生产者或消费者线程阻塞的状况。
程序在VC++6.0下编译通过。
- 上一篇: 微信跳转-微信跳抖音个人主页,微信跳出浏览器
- 下一篇: C++封装互斥锁_条件变量.rar