并发控制-生产者-消费者问题实验报告

并发控制-生产者-消费者问题实验报告

ID:38627645

大小:150.50 KB

页数:10页

时间:2019-06-16

并发控制-生产者-消费者问题实验报告_第1页
并发控制-生产者-消费者问题实验报告_第2页
并发控制-生产者-消费者问题实验报告_第3页
并发控制-生产者-消费者问题实验报告_第4页
并发控制-生产者-消费者问题实验报告_第5页
资源描述:

《并发控制-生产者-消费者问题实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、课程设计报告课程名称:基于Windows的课程设计题目:并发控制-生产者-消费者问题年级/专业/班:计算机09-3班学生姓名:学  号:指导老师:完成时间:2011-11-20一设计要求<1>完成N个生产者和M个消费者之间的并发控制,N、M不低于5,缓冲区大小不小于5个,生成的消息为一个自定义的数据结构。<2>某个生产者进程生产的消息供K个消费者进程消费。K《=M。某些消费进程消费多个生产者生产的消息。<3>每个生产进程生产M个消息后结束运行。如果一个消费者进程没有对应的生产者进程在运行后,也结束运行。<4>并发控制要求:生产

2、者消费者之间正确的互斥和同步<5>采用线程、进程两种方式完成<6>测试文件。测试要求:不同的N和M,不同的K,以及线程和进程。<7>运行结果显示要求每个线程/进程的动态运行信息运行时间每个进程或线程是否都完成了任务<8>注意:只有所有对应于一个生产者的所有消费者都访问过某临界区后,此生产者或其他生产者才可以向这个临界区放新的产品。二目的<1>通过在Windows2K/XP环境下对经典的生产者-消费者问题的编程实现,<2>加深理解信号量和wait、signal操作的原理<3>对Win32API中定义的IPC函数和涉及到的几种同步

3、对象有更进一步的了解三背景知识<1>使用互斥对象(Mutex)互斥对象具有如下的机制:如果互斥对象没有被任何线程拥有,那么它是“标记的”,如果被一个线程所拥有,那么它是“未标记的”;任何一个线程获得后,互斥对象就是“未标志的”,其他线程不可以再拥有这个互斥对象。同一时刻,一个互斥对象最多只能被一个线程拥有,从而实现“互斥”。HANDLECreateMutex(  LPSECURITY_ATTRIBUTESlpMutexAttributes,  BOOLbInitialOwner,LPCTSTRlpName);lpMutexAt

4、tributes参数是安全属性,一般设置为NULL;bInitia10wner表明创建后是否被创建线程所“拥有”;lpName是互斥对象名。<2>释放互斥对象BOOLWINAPIReleaseMutex(HANDLEhMutex;)ReleaseMutex函数的功能是释放互斥对象,一个线程释放了互斥对象后,如果其他进程在等待互斥对象置位,则等待的线程可以得到该互斥对象,等待函数返回,互斥对象被新的线程所拥有。<3>创建信号量Semaphore是另一个同步问题机制,不论是Event或Mutex,其他Process在执WaitFo

5、rSingleObject时,就看当时的物件是Signal或UnSignal而决定是否等待,而Semaphore也相同,但是它要变成Signal/UnSignal的状态,却有些不同,它是提供一个计数值,它允许在这个计数值之内,任何执行到WaitForSingleObject的Thread都不会停下来,而且每执行WaitForSingleObject一次,计数值就减一,当计数值变成0时,该Semaphore才会处於UnSignal的状态,而某个ThreadReleaseSemaphore时,便会将计数值增加,以便其他的Threa

6、d或本身可得Signal的讯号,而使WaitForSingleObject停止等待。CreateSemaphore函数的功能是创建信号量对象,函数原型如下:HANDLECreateSemaphore(  LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,LONGlInitialCount,LONGlMaximumCount,LPCTSTRlpName );lpSemaphoreAttributes参数是安全属性lInitialCount参数是初始的计数值,lMaximumCount参数是最大

7、的计数值lpName参数来给信号量对象命名。<4>创建线程CreateThread原型:  HANDLECreateThread(  LPSECURITY_ATTRIBUTESlpThreadAttributes,  DWORDdwStackSize,  LPTHREAD_START_ROUTINElpStartAddress,  LPVOIDlpParameter,  DWORDdwCreationFlags,  LPDWORDlpThreadId);其中最重要的参数是lpStartAddress和lpParameter。l

8、pStartAddress是线程的执行起点,也是线程函数的的指针。lpParameter是启动线程参数。lpThreadAttributes参数是线程的安全属性,dwStackSize参数是线程堆栈大小,dwCreationFlags参数是创建标志,lpThrreadId参数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。