- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
小组名称:郭涛涛小组
小组成员:郭涛涛
李源
白亚龙
题目1:多道程序缓冲区协调操作
如下图所示,有多个PUT1和PUT2操作要不断循环地向Buff1和Buff2送字符数据,有Move1和Move2操作不断地将Buff1和Buff2的数据取到Buff3,有多个GET操作要不断地从Buff3中取数据。PUT、 MOVE、 GET每次操作一个数据,为了在操作的过程中要保证数据不丢失, 每个Buffer每次只能接受一个PUT或一个Move或一个Get。运用进程同步和互斥机制设计一个多道程序完成上述操作。
基本功能要求
(1) 可以随机产生字符数据和提供两个数据文件,由put操作将数据放入Buff,buffer中容量单位是字符。
(2)提供良好图形界面,显示Buffer的操作过程,可以暂停和继续系统的执行。
(3) 可以设定各Buffer的容量、PUT、GET、Move操作的个数;
(4) 可以设定PUT、GET、Move操作的速度;
(5) 实时显示每个Buffer中已放入的数据和数据个数,当前Buffer中数据的个数和数据的内容,空闲Buffer的空间的个数;
(6) 实时显示线程、进程所处于等待(阻塞)状态的个数;
(7)程序运行结束,显示汇总数据:
总的运行时间;Buffer中数据的个数;已放入BUFFER的数据个数;
已取出的数据个数;平均每个buffer中的数据个数。
(8)能够将每次的实验输入和实验结果存储起来,下次运行时或以后可查询。
。。。。。。
我们创建三类线程:
(1) PUT1线程(往BUFFER1里放数据,相当于生产者)
PUT2线程(往BUFFER2里放数据,相当于生产者)
(2) MOVE1线程(从BUFFER1里取数据并放到BUFFER3里,相当于搬运者)
MOVE2线程(从BUFFER2里取数据并放到BUFFER3里,相当于搬运者)
(3) GET线程(从BUFFER3里取数据,相当于消费者)
每类线程可由用户自行设定线程的个数。
总体结构设计
模块关系设计
流程图
环境设置
界面设计
主界面
功能界面
统计界面
相关API函数介绍
(1)线程创建函数
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性
DWORD dwStackSize,//线程堆栈的初始化大小,等于0时为系统默认的堆栈大小
PLTHREAD_START_ROUTINE lpStartAddress,//线程函数
LPVOID lpParameter,//线程参数
DWORD dwCreationFlags,//创建方式
LPDWORD lpThreadId//线程表示符
)
该函数创建一个线程,如果没有特殊需要除第三个参数外都可设为0,按系统的默认取值对待,主要是第三个参数,它是线程程序的入口,线程程序入口的标准形式为 UINT FUNCTION (LPVOID param)
线程函数里可以传一个指针作为参数(param),该参数由创建线程函数(CreateThread)里的第四个参数确定。
(2)信号量创建函数
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,//安全属性指针
LONG llnitialCount,//初始计数
LONG lMaximumCount,//最大计数
LPCTSTR lpName//对象名指针
)
文档评论(0)