操作系统实验一-进程同步_第1页
操作系统实验一-进程同步_第2页
操作系统实验一-进程同步_第3页
操作系统实验一-进程同步_第4页
全文预览已结束

下载本文档

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

文档简介

精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业实验一进程同步一、实验目的:分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者与消费者问题的模拟,进一步加深对进程同步与互斥的理解。二、实验内容:用C语言实现对生产者与消费者问题的模拟。实验原理:生产者和消费者是经典的进程同步问题,在这个问题中,生产者不断的向缓冲区中写入数据,而消费者则从缓冲区中读取数据。生产者进程和消费者对缓冲区的操作是互斥,即当前只能有一个进程对这个缓冲区进行操作,生产者进入操作缓冲区之前,先要看缓冲区是否已满,如果缓冲区已满,则它必须等待消费者进程将数据取出才能写入数据,同样的,消费者进程从缓冲区读取数据之前,也要判断缓冲区是否为空,如果为空,则必须等待生产者进程写入数据才能读取数据。三、实验准备:1.实现步骤:(1)分析计算机系统中对资源的分配与释放过程:计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。(2)定义生产者消费者问题中的各数据结构,并初始化信号量;(3)创建生产者与消费者进程,利用信号量实现生产者与消费者之间的同步与互斥;最后编程实现。2.相关函数:在实现的过程中需要用到以下API函数:(1)CreateThread()//该函数创建一个在调用进程的地址空间中执行的线程。若线程创建成功,将返回该线程的句柄。函数原型:

HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,//描述安全性,用NULL表示使用缺省值DWORDdwStackSize,

//新线程拥有自己的堆栈,0表示使用缺省值1MB,推荐LPTHREAD_START_ROUTINE

lpStartAddress,

//新线程的起始地址,放线程函数名称LPVOID

lpParameter,//此值被传送到线程函数去作为参数DWORDdwCreationFlags,//允许产生一个暂时挂起的线程,默认是0立即开始执行LPDWORDlpThreadld

);//新线程的ID被传到这用法举例: hHandle1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,0,&dwThreadID1);(2)CreateMutex()函数可用来创建一个有名或无名的互斥量对象,函数返回值为互斥对象的句柄。其函数原型为:HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,//指向安全属性的指针,为NULL时,信号量得到一个默认的安全描述BOOLbInitialOwner,//初始化互斥对象的所有者LPCTSTRlpName);//指向互斥对象名用法举例:handleg_hMutex;g_hMutex=CreateMutex(NULL,FALSE,”mutexname1”);(3)ReleaseMutex()该函数放弃指定互斥对象的拥有权。每使用一次,MUTEX引用计数自加1;函数原型:BOOLReleaseMutex(

HANDLEhMutex//想要释放的信号量句柄);HANDLEhHandle1=NULL;BOOLrc;rc=ReleaseMutex(hHandle1);(4)CreateSemaphore()是创建信号量,返回信号量对象的句柄。其函数原型为:HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,//安全属性指针LONGlInitialCount,//初始计数LONGlMaximumCount,//最大计数LPCTSTRlpName//对象名);用法举例:staticHANDLEhHandle1=NULL; hHandle1=CreateSemaphore(NULL,0,1,"SemaphoreName1");(5)ReleaseSemaphore()是增加信号量BOOLReleaseSemaphore(HANDLEhSemaphore,//信号量句柄LONGlReleaseCount,//计数递增数量LPLONGlpPreviousCount//先前计数);用法举例:HANDLEhHandle1=NULL;BOOLrc; rc=ReleaseSemaphore(hHandle1,1,NULL);(6)WaitForSingleObject函数功能:(用来检测handle事件的信号状态)当如下情况之一发生时该函数返回:指定对象处于信号态;超时。函数原型:

DWORD

WaitForSingleObject(

HANDLEhHandle,//等待对象的线程HANDLE,或者仅仅是一个句柄,如信号量

DWORDdwMilliseconds//如果输入INFINITE,则无穷等待,直到HANDLE激活为止);用法举例:staticHANDLEhHandle1=NULL; DWORDdRes,;dRes=WaitForSingleObject(hHandle1,IN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论