欢迎来到天天文库
浏览记录
ID:860016
大小:171.03 KB
页数:18页
时间:2017-09-21
《生产者与消费者问题0》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、操作系统课程设计报告题目:生产者与消费者问题班级:$$$$$$$$$$学号:0804010214姓名:$$$$$指导教师$$$$$2010-1-13一、题目(生产者与消费者问题)1.课程设计题目分析题目分析:生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。要求设计在同一个进程地址空间内执行的两个进程。生产者进程生产物品,然后将物品放置在一个空缓冲区中供消费者进程消费。消费者进程从缓冲区中获得物品,然后释放缓冲区。当生产者进程生产物品时,如果没
2、有空缓冲区可用,那么生产者进程必须等待消费者进程释放出一个空缓冲区。当消费者进程消费物品时,如果没有满的缓冲区,那么消费者进程将被阻塞,直到新的物品被生产出来。功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放数据、取数据等过程。键盘输入进程数和缓冲区数目,可调度生产者、消费者的活动及显示进程的当前状态。为实现进程互斥的进入自己的临界区,所有同步机制都应遵循以下四条准则:(1)空闲让进,(2)忙着等待,(3)有限等待(4)让权等待。2.数据结构(1)CreateThread
3、l功能——创建一个在调用进程的地址空间中执行的线程l格式HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParamiter,DWORDdwCreationFlags,LpdwordlpThread);l参数说明lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的
4、安全性描述符)。dwStackSize——定义原始堆栈大小。lpStartAddress——指向使用LPTHRAED_START_ROUTINE类型定义的函数。lpParamiter——定义一个给进程传递参数的指针。dwCreationFlags——定义控制线程创建的附加标志。lpThread——保存线程标志符(32位)(2)CreateMutexl功能——创建一个命名或匿名的互斥量对象l格式HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttribut
5、es,BOOLbInitialOwner,LPCTSTRlpName);l参数说明lpMutexAttributes——必须取值NULL。bInitialOwner——指示当前线程是否马上拥有该互斥量(即马上加锁)。lpName——互斥量名称。(3)CreateSemaphorel功能——创建一个命名或匿名的信号量对象l格式HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,LONGlInitialCount,LONGlM
6、aximumCount,LPCTSTRlpName);l参数说明lpSemaphoreAttributes——必须取值NULL。lInitialCount——信号量的初始值。该值大于0,但小于lMaximumCount指定的最大值。lMaximumCount——信号量的最大值。lpName——信号量名称。(4)WaitForSingleObjectl功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间l格式DWORDWaitForSingleObject(
7、HANDLEhHandle,DWORDdwMilliseconds);l参数说明hHandle——信号量指针。dwMilliseconds——等待的最长时间(INFINITE为无限等待)。(5)ReleaseSemaphorel功能——对指定信号量加上一个指定大小的量。成功执行则返回非0值l格式BOOLReleaseSemaphore(HANDLEhSemaphore,LONGlReleaseCount,LPLONGlppreviousCount);l参数说明hSemaphore——信号量指针。lR
8、eleaseCount——信号量的增量。lppreviousCount——保存信号量当前值。(6)ReleaseMutexl功能——打开互斥锁,即把互斥量加1。成功调用则返回0l格式BOOLReleaseMutex(HANDLEhMutex);l参数说明hMutex——互斥量指针。(7)InitializeCriticalSectionl功能——初始化临界区对象l格式VOIDInitializeCriticalSection(LPCRITICAL_SECTIONlpC
此文档下载收益归作者所有