实验3.doc
- 文档编号:1307241
- 上传时间:2023-04-30
- 格式:DOC
- 页数:5
- 大小:77KB
实验3.doc
《实验3.doc》由会员分享,可在线阅读,更多相关《实验3.doc(5页珍藏版)》请在冰点文库上搜索。
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、创建互斥体来访问数值,随后两个进程轮流将数值写入输入流中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验