操作系统实验一 P、V操作应用分析_第1页
操作系统实验一 P、V操作应用分析_第2页
操作系统实验一 P、V操作应用分析_第3页
操作系统实验一 P、V操作应用分析_第4页
操作系统实验一 P、V操作应用分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、()。实验源程序代码#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的两个资源:满和空/ semaphore表示缓冲区buffer满,初始值为0,最大值为1/ sem

4、aphore2表示缓冲区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,NULL);hThread2二CreateThread(N

5、ULL,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+)(/等待缓冲区空WaitForSingleObject( s

6、emaphore2, 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获取数据c=buffer;/输出从缓冲区buffer取出的数据

7、coutc;/通知缓冲区空ReleaseSemaphore( semaphore2, 1, NULL );/回车换行coutendl;return 0;5、实验二(实验一、二任选一个)桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可 向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规 定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸 爸、儿子、女儿三个并发进程的同步。分析在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能 放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入 果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是 苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者 问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也 有两类,每类消费者只消费其中固定的一类产品。解:在本题中,应设置三个信号量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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论