永发信息网

“计算机操作系统”课程设计

答案:2  悬赏:0  手机版
解决时间 2021-04-20 08:12

一、题目: 创建线程,利用互斥实现线程共享变量通信

二、目的

掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。

三、内容和要求

软件界面上点“创建线程” 按钮,创建三个生产者线程(P1,P2,P3)和两个消费者线程(C1,C2),生产者和消费者线程共享一个长度为2KB的环型公共缓冲区,生产者向其中投放消息,消费者从中取走消息。只要缓冲区未满,生产者可将消息送入缓冲区;只要缓冲区未空,消费者可从缓冲区取走一个消息。

每个消息具下列结构格式:

消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),检验和计算方式为消息长度和消息内容所有字节异或结果。

每个生产者每隔n毫秒(n用随机数产生,1到100毫秒之间,间隔不固定)生产一个消息加入缓冲区,并把消息产生时间和内容记录在一个文本文件中(或显示在列表框中)。P1每次生产的数据为26个大写字母, P2每次生产的数据为26个小写字母,P3每次生产的数据为10个数字。

每个消费者每隔n秒(n用随机数产生,1到5秒之间,间隔不固定)从缓冲区取走一个消息。每消费一个消息需要将消费时间和消息内容记录在一个文本文件中(或显示在列表框中)。

当用户按结束按钮时结束5个线程,并将5个文件内容显示出来进行对照。

实验要求:

每人完成一份大作业实验报告。报告分问题概述、设计思想、数据定义、处理流程、源程序、运行结果、设计体会等部分。

1) 概述所采用的同步方法;

2) 给出数据定义和详细说明;

3) 给出实现思想和设计流程;

4) 调试完成源程序;

5) 屏幕观察运行结果;

6) 总结自己的设计体会;

编程工具及操作系统平台不限,建议用VC6. 0或Delphi开发。

四、参考资料

Windows系统相关知识介绍

1. 同步对象

同步对象是指Windows中用于实现同步与互斥的实体,包括信号量(Semaphore)、互斥量(Mutex)、临界区(Critical Section)和事件(Events)等。

同步对象的使用步骤:

l 创建/初始化同步对象。

l 请求同步对象,进入临界区(互斥量上锁)。

l 释放同步对象(互斥量解锁)。

这些对象在一个线程中创建,在其他线程中都可以使用,实现同步与互斥。本实验中需要用到互斥量(Mutex),用于多个线程对共享数据互斥访问。

2. 相关API的功能及使用

我们利用Windows SDK提供的API编程实现实验题目要求,而VC中包含有Windows SDK的所有工具和定义(参见MSDN)。要使用这些API,需要包含这些函数进行说明的SDK头文件——最常见的是Windows.h(特殊的API调用还需要包含其他头文件)。

下面给出的是本实验使用到的API的功能和使用方法简单介绍。

(1) CreateThread

l 功能——创建一个在调用进程的地址空间中执行的线程

l 格式

HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,

DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParamiter,

DWORD dwCreationFlags,

Lpdword lpThread );

l 参数说明

lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。

dwStackSize——定义原始堆栈大小。

lpStartAddress——指向使用LPTHRAED_START_ROUTINE类型定义的函数。

lpParamiter——定义一个给进程传递参数的指针。

dwCreationFlags——定义控制线程创建的附加标志。

lpThread——保存线程标志符(32位)

(2) CreateMutex

l 功能——创建一个命名或匿名的互斥量对象

l 格式

HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,

BOOL bInitialOwner,

LPCTSTR lpName);

l 参数说明

lpMutexAttributes——必须取值NULL。

bInitialOwner——指示当前线程是否马上拥有该互斥量(即马上加锁)。

lpName——互斥量名称。

(3) WaitForSingleObject

l 功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间

l 格式

DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);

l 参数说明

hHandle——信号量指针。

dwMilliseconds——等待的最长时间(INFINITE为无限等待)。

(4) ReleaseMutex

l 功能——打开互斥锁,即把互斥量加1。成功调用则返回0

l 格式

BOOL ReleaseMutex(HANDLE hMutex);

l 参数说明

hMutex——互斥量指针。

(5)其它有关函数Sleep,ResumeThread, TerminateThread,CloseHandle等,请查阅MSDN

五、提交内容

本大作业每个人必须单独完成。最后需提交的内容包括:源程序(关键代码需要注释说明)、可运行程序、算法思路及流程图、心得体会。将以上内容刻入光盘,光盘上写明班级、学号、姓名信息,再将大作业要求、源程序及注释、算法思路及流程图、心得体会等打印出来。最后将打印稿及光盘统一交给网络学院教务员。截止时间2009年12月1日。过期自负。

大作业严禁抄袭。发现抄袭一律以不及格论。

最佳答案

一、题目: 创建线程,利用互斥实现线程共享变量通信


二、目的


掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。


三、内容和要求


软件界面上点“创建线程” 按钮,创建三个生产者线程(P1,P2,P3)和两个消费者线程(C1,C2),生产者和消费者线程共享一个长度为2KB的环型公共缓冲区,生产者向其中投放消息,消费者从中取走消息。只要缓冲区未满,生产者可将消息送入缓冲区;只要缓冲区未空,消费者可从缓冲区取走一个消息。


每个消息具下列结构格式:


消息头(1B,固定为0xaa),消息长度(1B),消息内容(nB),校验和(1B),检验和计算方式为消息长度和消息内容所有字节异或结果。


每个生产者每隔n毫秒(n用随机数产生,1到100毫秒之间,间隔不固定)生产一个消息加入缓冲区,并把消息产生时间和内容记录在一个文本文件中(或显示在列表框中)。P1每次生产的数据为26个大写字母, P2每次生产的数据为26个小写字母,P3每次生产的数据为10个数字。


每个消费者每隔n秒(n用随机数产生,1到5秒之间,间隔不固定)从缓冲区取走一个消息。每消费一个消息需要将消费时间和消息内容记录在一个文本文件中(或显示在列表框中)。


当用户按结束按钮时结束5个线程,并将5个文件内容显示出来进行对照。



实验要求:


每人完成一份大作业实验报告。报告分问题概述、设计思想、数据定义、处理流程、源程序、运行结果、设计体会等部分。


1) 概述所采用的同步方法;


2) 给出数据定义和详细说明;


3) 给出实现思想和设计流程;


4) 调试完成源程序;


5) 屏幕观察运行结果;


6) 总结自己的设计体会;


编程工具及操作系统平台不限,建议用VC6. 0或Delphi开发。



四、参考资料


Windows系统相关知识介绍


1. 同步对象


同步对象是指Windows中用于实现同步与互斥的实体,包括信号量(Semaphore)、互斥量(Mutex)、临界区(Critical Section)和事件(Events)等。


同步对象的使用步骤:


l 创建/初始化同步对象。


l 请求同步对象,进入临界区(互斥量上锁)。


l 释放同步对象(互斥量解锁)。


这些对象在一个线程中创建,在其他线程中都可以使用,实现同步与互斥。本实验中需要用到互斥量(Mutex),用于多个线程对共享数据互斥访问。


2. 相关API的功能及使用


我们利用Windows SDK提供的API编程实现实验题目要求,而VC中包含有Windows SDK的所有工具和定义(参见MSDN)。要使用这些API,需要包含这些函数进行说明的SDK头文件——最常见的是Windows.h(特殊的API调用还需要包含其他头文件)。


下面给出的是本实验使用到的API的功能和使用方法简单介绍。


(1) CreateThread


l 功能——创建一个在调用进程的地址空间中执行的线程


l 格式


HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,


DWORD dwStackSize,


LPTHREAD_START_ROUTINE lpStartAddress,


LPVOID lpParamiter,


DWORD dwCreationFlags,


Lpdword lpThread );


l 参数说明


lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。


dwStackSize——定义原始堆栈大小。


lpStartAddress——指向使用LPTHRAED_START_ROUTINE类型定义的函数。


lpParamiter——定义一个给进程传递参数的指针。


dwCreationFlags——定义控制线程创建的附加标志。


lpThread——保存线程标志符(32位)


(2) CreateMutex


l 功能——创建一个命名或匿名的互斥量对象


l 格式


HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,


BOOL bInitialOwner,


LPCTSTR lpName);


l 参数说明


lpMutexAttributes——必须取值NULL。


bInitialOwner——指示当前线程是否马上拥有该互斥量(即马上加锁)。


lpName——互斥量名称。


(3) WaitForSingleObject


l 功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间


l 格式


DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);


l 参数说明


hHandle——信号量指针。


dwMilliseconds——等待的最长时间(INFINITE为无限等待)。


(4) ReleaseMutex


l 功能——打开互斥锁,即把互斥量加1。成功调用则返回0


l 格式


BOOL ReleaseMutex(HANDLE hMutex);


l 参数说明


hMutex——互斥量指针。


(5)其它有关函数Sleep,ResumeThread, TerminateThread,CloseHandle等,请查阅MSDN


五、提交内容


本大作业每个人必须单独完成。最后需提交的内容包括:源程序(关键代码需要注释说明)、可运行程序、算法思路及流程图、心得体会。将以上内容刻入光盘,光盘上写明班级、学号、姓名信息,再将大作业要求、源程序及注释、算法思路及流程图、心得体会等打印出来。最后将打印稿及光盘统一交给网络学院教务员。截止时间2009年12月1日。过期自负。


大作业严禁抄袭。发现抄袭一律以不及格论。

全部回答
大作业严禁抄袭。发现抄袭一律以不及格论
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
送我一个游戏人生好吗?
孩子总爱咬东西是因为缺少微量元素吗?
lol战争学院的荣耀能中年限吗
我要好听的抒情英文歌,最好是比较新的。越多
重装系统后,收藏夹的网址不见啦,还找得回来
我的基本设置怎么没有综合设置
没有事事业心!没有野心!还是男人吗?
什么的水上城市填空,繁华的什么填空词语
汕头市濠江区礐石街道珠浦社区居民委员会怎么
为什么胸部会痛?
基督教诗歌祝福你灵性美好简谱
化妆大世界我想知道这个在什么地方
DNF懂行的进!
加松14/18.4/23.5等版面宽度一方多少钱?不懂
问个小物理题
推荐资讯
苏州有和谐号吗
地下城PK连招
我的会员加速是1.1倍,我的超级QQ加速是1.1倍
蚂蚁花呗最多能借多少,蚂蚁金服可以贷款吗?
qq农场的枇杷种子怎么来的?
搜索一首诗歌,有一句的大意是这样的
铃声 连着哭都没用连着心都不会痛 你就像 一
古诗词中月亮的意象,关于描写月亮的诗句
早餐总是不太想吃:吃的话,午餐不想吃;不吃的
寻仙使用舞王秘笈处于多少倍的经验状态?
QQ炫舞里好听的歌
同学聚会感言短语诗词,同学聚会感言
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?