利用信号量解决生产者消费者问题 第6页
利用信号量解决生产者消费者问题 第6页
6.使用说明书
6.1本次设计是在Visual C++里做的,具体使用过程按运行时候的提示进行操作。
进入运行界面,如下面图所示:若图片无法显示请联系QQ3249114
图
7.总结
通过这次课程设计,不但加深了对操作系统这们课程的认识,而且还了解了操作系统中使用AND信号量解决生产者—消费者问题算法的实现。比如:用AND信号量解决生产者—消费者问题时,可以通过一个有界缓冲区(用数组来实现,类似循环队列)把生产者和消费者联系起来。假定生产者和消费者的优先级是相同的,只要缓冲区未满,生产者就可以生产产品并将产品送入缓冲区。类似地,只要缓冲区未空,消费者就可以从缓冲区中去走产品并消费它。为了解决生产者/消费者问题,应该设置两个资源信号量,其中一个表示空缓冲区的数目,用g_hFullSemaphore表示,其初始值为有界缓冲区的大小SIZE_OF_BUFFER;另一个表示缓冲区中产品的数目,用g_hEmptySemaphore表示,其初始值为0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量g_hMutex,起初值为1。在生产者/消费者问题中,信号量实现两种功能。首先,它是生产产品和消费产品的计数器,计数器的初始值是可利用的资源数目(有界缓冲区的长度)。其次,它是确保产品的生产者和消费者之间动作同步的同步器。
生产者要生产一个产品时,首先对资源信号量g_hFullSemaphore和互斥信号量g_hMutex进行P操作,申请资源。如果可以通过的话,就生产一个产品,并把产品送入缓冲区。然后对互斥信号量g_hMutex和资源信号量g_hEmptySemaphore进行V操作,释放资源。消费者要消费一个产品时,首先对资源信号量g_hEmptySemaphore和互斥信号量g_hMutex进行P操作,申请资源。如果可以通过的话,就从缓冲区取出一个产品并消费掉。然后对互斥信号量g_hMutex和资源信号量g_hFullSemaphore进行V操作,释放资源。
另外,使我体会最深的是:任何一门知识的掌握,仅靠学习理论知识是远远不够的,要与实际动手操作相结合才能达到功效。短短的课程设计就要结束了,不但对专业知识有了更深的理解,更使自己认识到实践的重要性,理论、实践相结合才能达到很好的学习效果,特别是程序语言的学习。
参考文献
[1] 张尧学等编著.计算机操作系统教程.清华大学出版社,2002.02
[2] 汤子瀛等编著.计算机操作系统.西安电子科技出版社,1996.12
[3] 陈向群编著.操作系统教程.北京大学出版社,2001.07
[4] 郑莉,傅仕星编著.C++语言设计. 北京: 清华大学版社.2000
[5] 严蔚敏,吴伟民编著.数据结构. 北京: 清华大学版社.2002