操作系统实验一 P、V操作应用分析

上传人:桔**** 文档编号:486192864 上传时间:2023-06-20 格式:DOCX 页数:7 大小:11.70KB
返回 下载 相关 举报
操作系统实验一 P、V操作应用分析_第1页
第1页 / 共7页
操作系统实验一 P、V操作应用分析_第2页
第2页 / 共7页
操作系统实验一 P、V操作应用分析_第3页
第3页 / 共7页
操作系统实验一 P、V操作应用分析_第4页
第4页 / 共7页
操作系统实验一 P、V操作应用分析_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《操作系统实验一 P、V操作应用分析》由会员分享,可在线阅读,更多相关《操作系统实验一 P、V操作应用分析(7页珍藏版)》请在金锄头文库上搜索。

1、实验一 P、V原语应用分析1、实验目的和要求(1) 了解P、V操作的原理;(2) 了解Windows操作系统中P、V操作的实验函数;(3) P、V操作的应用。实验类型:验证性实验2、实验原理(1) Windows操作系统中P操作对应的函数是:WaitForSingleObject(), 了解此函数的功能;(2) Windows操作系统中V操作对应的函数是:ReleaseSemaphore(),了 解此函数的功能;(3) 实现P、V操作。3、实验一(实验一、二任选一个)1) 内容及步骤有两个线程hThread1和hThread2共同使用一个缓冲区资源buffer,线程 hThread1负责向bu

2、ffer中写入字符,线程hThread2负责从buffer中读取字符, 并显示出来。这样,线程hThread1对缓冲区buffer的写操作Write()和线程 hThread2对缓冲区buffer的读操作Read()就需要互斥使用缓冲区资源buffer 了。为了让Write()每次写入的字stri (i=0.4)一定能被唯一地Read() 一 次,需要把缓冲区buffer的使用看做对两个资源的操作:缓冲区buffer满和缓 冲区buffer空。这样,需要定义两个信号量semaphore和semaphore2,分别控制对缓冲 区buffer满”和“缓冲区buffer空”这两个资源的互斥使用。只有

3、缓冲区空时 可以Write(),缓冲区满时可以Read()。2) 实验源程序代码#include#include/定义两个线程函数Write()和Read()/ Read()、Write()函数分别使用 VC+ 的 P、V 操作 WaitForSingleObject() 和 ReleaseSemaphore()DWORD WINAPI Write(LPVOID lpParameter);DWORD WINAPI Read(LPVOID lpParameter);/缓冲区资源unsigned char buffer;/两个信号量,分别使用缓冲区buffer的两个资源:满和空/ semaphor

4、e表示缓冲区buffer满,初始值为0,最大值为1/ semaphore2表示缓冲区buffer空,初始值为1,最大值为1HANDLE semaphorel;HANDLE semaphore2;线程句柄HANDLE hThreadl;HANDLE hThread2;void main()(/ buffer 清空buffer=;/创建信号量semaphorel二CreateSemaphore(NULL,0,1,NULL);semaphore2=CreateSemaphore(NULL,1,1,NULL);/创建线程hThread1二CreateThread(NULL,0,Write,NULL,0

5、,NULL);hThread2二CreateThread(NULL,0,Read,NULL,0,NULL);/在子线程执行完前主线程不能退出,否则显示结果异常Sleep(10000);/关闭句柄CloseHandle(Write);CloseHandle(Read);/释放信号量CloseHandle(semaphorel);CloseHandle(semaphore2);/线程1对应的p函数实体:缓冲区buffer写操作DWORD WINAPI Write(LPVOID lpParameter)(unsigned char str6=Hello;int i=0;for (i=0;i5;i+)

6、(/等待缓冲区空WaitForSingleObject( semaphore2, INFINITE );/缓冲区空时,向缓冲区写入数据buffer=stri;/通知缓冲区满ReleaseSemaphore( semaphore, 1, NULL );return 0;/线程2对应的V函数实体:缓冲区buffer读操作DWORD WINAPI Read(LPVOID lpParameter)(int i=1;unsigned char c;for (i=1;i=5;i+)(/ 等待缓冲区满WaitForSingleObject( semaphorel, INFINITE);/从缓存buffer获

7、取数据c=buffer;/输出从缓冲区buffer取出的数据coutc;/通知缓冲区空ReleaseSemaphore( semaphore2, 1, NULL );/回车换行coutendl;return 0;5、实验二(实验一、二任选一个)桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可 向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规 定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸 爸、儿子、女儿三个并发进程的同步。分析在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能 放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入 果盘中的是桔子,则允

8、许儿子吃,女儿必须等待;若放入果盘中的是 苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者 问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也 有两类,每类消费者只消费其中固定的一类产品。解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为l;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。同步描述如下:int S = 1;int Sa=0;int So=0;main()(cobeginfather();/* 父亲进程 */son();/*儿子进程*/daughter();/* 女儿进程*/coendfather()(while(1)(P(S);将水果放入盘中;if (放入的是桔子)V(So);else V(Sa);son()(while(1)(P(So);从盘中取出桔子;V(S);吃桔子;daughter()(while(1)(P(Sa);从盘中取出苹果;V(S);吃苹果;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号