欢迎来到天天文库
浏览记录
ID:38627645
大小:150.50 KB
页数:10页
时间:2019-06-16
《并发控制-生产者-消费者问题实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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参数
此文档下载收益归作者所有