永发信息网

计算机操作系统课程设计

答案:1  悬赏:0  手机版
解决时间 2021-07-17 19:51
  • 提问者网友:星軌
  • 2021-07-17 15:51

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

二、目的

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

三、内容和要求

软件界面上点“创建线程” 按钮,创建三个生产者线程(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

最佳答案
  • 五星知识达人网友:白昼之月
  • 2021-07-17 17:06
你好哦。
有幸看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
祝你好运~!
希望我的回答也能够帮到你!
谢谢
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯