生产消费问题.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
生产消费问题.doc

1?设计题目与要求 1.1设计题丨|进程同步(生产者和消费者进程同步) 1.2设计要求121初始条件 用 vc++6.0 操作系统:windows 3.界血友好 4.设有3名生产者,1名消费者,10个存储空间用来存储生产的产品。 总体设计思想及开发环境与工具 2.1总体设计思想 生产者和消费者共享一个有界缓冲池,该有界缓冲池负责存放货物;当缓冲池耒满时,生 产者对将产品送入缓冲池。缓冲区满则不能放;当缓冲池不为空时,消费者可从缓冲池取 产品,缓冲区空则不能取。当缓冲区满时,缓冲区上锁等待消费者线程消耗产品。消费者 进程消耗产品顺序和产品产生顺序是相同的。用Producer和Consumer ?示生产者和消费者 的线程。每当生产者线程发现缓冲区满,就等待Consumer事件。同样消费者线程发现缓冲 区空,就等待Producer。 引入信号量:互斥信号量g_hMutex,糊true时,则表示缓冲区正被别的进程使用; 缓 冲区满的信号量:g_hFullSemaphore,值为true时表示缓冲区已满; 缓冲区空的信号 M: g_hEmptySemaphore,值为(rue时表示缓冲区为空。 2.2多线程编程原理 在windows卜辿行线程编程需要川到CreateThread函数 221创建一个线程 CreateThread用来创建线程,原型为: hl hread = CreateThread (security_attributes, dwStackSize, ThreadProc,pPiiram, dwFlags, idT hread)第一个参数是指向SECURITY.ATTRIBUTES型态的结构的指针,第二个参数是用于 新线程的初始堆栈大小,默认值为0;第三个参数是指向线程函数的指针;第四个参数为传 递给ThreadProc的参数;第五个参数通常为0。 2.2.2信号量 1?利用函数CreateMutex(NULL,FALSE,NULL)创建互斥倍号量 jhMutex,表示缓冲区当前 的状态,若为true时,则表示缓冲区正被别的进程使川。三个参数表示的意义分别为:指 向安全属性的指针,初始化互斥对象的所有者,指向互斥对象名的指针, 利用函数 CreateSemaphore(NULL,SIZE_OF_BUFFER-1 ,SIZE_OF_BUFFER-1 ,NULL)创建 缓冲区满的信号量g_hFullSemaphore,ffi为true时表示缓冲区已满。四个参数分别为:表示 是否允许继承、设置信号机的初始汁数、设置信号机的最人计数、指定信号机对象的名称(-1 是因为计数从开始) 利用函数 CreateSemaphore(NULL,0,SIZE_OF_BUFFER-l,NULL)创建缓冲区空的信号量 g_hEmptySemaphore,该值为true时表示缓冲区为空。 2.3伪码实现 -2- semaphore SIZE_OF_BUFFER= 10〃缓冲区人小 semaphore mutex= 1, g_hFullSemphore=9, g_hEmptySemaphore=0; 〃初始化信号量 DWORD WINAPI Producer(LPVOID IpPara) { while(g_continue) { WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INF IN1TE); Produce(); Append(); Sleep(1500); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hEmptySemaphore J ,NULL); } TOC \o 1-5 \h \z return 0; } DWORD WINAPI Producer()// 牛产者线程 DWORD WINAPI Consumer()// 消 费者线 程{ { while(g_continue) while(g_continue) { { WaitForSingleObject(g_hFullSemaphore, WaitForSingleObject(g_hEmptySemaphore, INFI NITE); INFINITE); WaitForSingleObject(g^hMutex,INFINITE); WaitForSingleObject(jhMutex,INFINITE); Pr oduce();//生产产品 Take();//消费者从缓冲池取出一个产品Append。;//向缓冲 池放入产品 Consume();//消耗一个产品Sleep(lOOO);//休 眠 Sleep(lOOO);//

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档