实验3.doc

上传人:b****1 文档编号:236943 上传时间:2022-10-07 格式:DOC 页数:5 大小:77KB
下载 相关 举报
实验3.doc_第1页
第1页 / 共5页
实验3.doc_第2页
第2页 / 共5页
实验3.doc_第3页
第3页 / 共5页
实验3.doc_第4页
第4页 / 共5页
实验3.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验3.doc

《实验3.doc》由会员分享,可在线阅读,更多相关《实验3.doc(5页珍藏版)》请在冰豆网上搜索。

实验3.doc

Windows操作系统

C/C++程序实验

姓名:

_________________

学号:

________

班级:

__________

院系:

________

_____2013___年__10_月___11_日

4

实验三Windows2000/xp线程同步

一、背景知识

二、实验目的

在本实验中,通过对事件互斥体对象的了解,来加深对Windows2000/xp线程同步的理解。

1)回顾系统进程、线程的有关概念,加深对Windows2000/xp线程的理解。

2)了解事件和互斥体对象。

3)通过分析实验程序,了解管理事件对象的API。

4)了解在进程中如何使用事件对象。

5)了解在进程中如何使用互斥体对象。

6)了解父进程创建子进程的程序设计方法。

三、工具/准备工作

在开始本实验之前,请回顾教科书的相关内容。

您需要做以下准备:

1)一台运行Windows2000/xpProfessional操作系统的计算机。

2)计算机中需安装VisualC++6.0专业版或企业版。

四、实验内容与步骤

1.事件对象

清单4-1程序展示了如何在进程间使用事件。

父进程启动时,利用CreateEvent()API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。

在创建时,子进程通过OpenEvent()API打开事件对象,调用SetEvent()API使其转化为已接受信号状态。

两个进程在发出信号之后几乎立即终止。

步骤1:

登录进入Windows2000/xpProfessional。

步骤2:

在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。

步骤3:

在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-1.cpp。

步骤4:

单击“Build”菜单中的“Compile3-1.cpp”命令,并单击“是”按钮确认。

系统对3-1.cpp进行编译。

步骤5:

编译完成后,单击“Build”菜单中的“Build3-1.exe”命令,建立3-1.exe可执行文件。

操作能否正常进行?

如果不行,则可能的原因是什么?

_________是__________________________________________________________

___________________________________________________________________

步骤6:

在工具栏单击“ExecuteProgram”(执行程序)按钮,执行3-1.exe程序。

运行结果(分行书写。

如果运行不成功,则可能的原因是什么?

):

1)___eventcreated_________________________________________________

2)___chlidcreated________________________________________________

3)___Parentwaitingcohnilcdhiplrdo.c____________________________

4)___essbegining_________________________________________________

5)___eventsignaled_________________________________________________

6)___Parentreleased_______________________________________________

这个结果与你期望的一致吗?

(从进程并发的角度对结果进行分析)

不一致,每一次运行结果不同,有时会与期望一致,是多核处理器调度问题.

父进程通过系统函数CreateEvent()创建一个事件和子进程,然后子进程向事件发出信号,父进程终止。

子进程通过OpenEvent()打开事件对象,调用SetEvent()使其转化为已接受信号状态。

两个进程在发出信号之后几乎立即终止。

阅读和分析程序3-1,请回答:

1)程序中,创建一个事件使用了哪一个系统函数?

创建时设置的初始信号状态是什么?

a.CreateEvent()

b.非接受信号状态

2)创建一个进程(子进程)使用了哪一个系统函数?

CreateChild()

3)从步骤6的输出结果,对照分析3-1程序,可以看出程序运行的流程吗?

请简单描述:

1、创建一个事件

2、创建子进程,父进程等待子进程的开始

3、子进程开始运行,最初创建的事件收到信号,父进程收到子进程向事件发出的信号后父进程被停止。

4、在发出信号之后,两个进程几乎立即停止。

2.互斥体对象

步骤7:

在VisualC++窗口的工具栏中单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-2.cpp。

步骤8:

单击“Build”菜单中的“Compile3-2.cpp”命令,并单击“是”按钮确认。

系统对3-2.cpp进行编译。

步骤9:

编译完成后,单击“Build”菜单中的“Build3-2.exe”命令,建立3-2.exe可执行文件。

操作能否正常进行?

如果不行,则可能的原因是什么?

__________是__________________________________________________________

________________________________________________________________________

步骤10:

在工具栏单击“ExecuteProgram”按钮,执行3-2.exe程序。

分析程序3-2的运行结果,可以看到线程(加和减线程)的交替执行(因为Sleep()API允许Windows切换线程)。

在每次运行之后,数值应该返回初始值(0),因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行。

1)请描述运行结果(如果运行不成功,则可能的原因是什么?

):

2)根据运行输出结果,对照分析4-2程序,可以看出程序运行的流程吗?

请简单描述:

_该程序使用的是互斥体来保护共享资源。

1、创建两个进程来访问共享值

2、创建互斥体来访问数值,随后两个进程轮流将数值写入输入流中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1