欢迎来到天天文库
浏览记录
ID:58664066
大小:963.50 KB
页数:44页
时间:2020-10-15
《天津科技大学操作系统实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2015-2016学年第一学期计算机操作系统实验报告专业:计算机科学与技术班级:学号:姓名:日期:实验一Windows多线程【开发语言及实现平台或实验环境】C++/C#MicrosoftVisualStudio6.0/MicrosoftVisualStudio.NET【实验目的】(1)进一步理解操作系统的并发性;(2)了解Windows线程创建方法,并通过查阅资料理解各参数的含义;(3)了解多线程程序设计方法,并进行简单应用。【实验要求】(1)逐程序进行简要分析、运行各程序并仔细阅读注释;(2)查阅MSDN或其他
2、资料,掌握相关系统调用使用方法和参数含义;(3)完成实验报告。【实验结果与分析】(1)1-1.cpp程序运行1-1.cpp结果:将main函数中注释掉的Sleep语句让其可用,运行结果为:分析原因:Sleep(0)的作用为语句可观察线程1和主线程并发执行。输出结果“mainthreadisrunning/thread1isrunning”。没有添加的线程1运行结束只输出“mainthreadisrunning”。(2)1-2.cpp程序运行1-2.cpp结果:分析原因:1-2.cpp文件使用的是时间片轮转方法调度
3、的主线程、线程1、线程2.因此不需要sleep语句就可将主线程调度。因为在两个线程中存在共享变量,因此执行结果出现不可再现性。(3)1-3.cpp程序运行1-3.cpp结果:将main函数中注释掉的Sleep语句让其可用,运行结果为:将两个子函数中注释掉的Sleep语句让其可用,运行结果:分析原因:加入两个sleep(1)后,有可能到thread1isselltickets:时间片就停了,tickets没--,还可以运行thread2isselltickets:"<4、返回再运行thread1isselltickets时就卖0号票了。【实验思考及总结】………………………(1)加入循环,使得两个进程可以交替执行。(2)Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以1/1000秒为单位的。(3)线程也有父子关系。父进程退出后子进程也会退出。(4)不可再现性:两个进程同时迈出同一部步,两个进程中存在共享变量。.实验二Windows线程同步机制【开发语言及实现平台或实验环境】C++/C#MicrosoftVisualStudio6.0/MicrosoftVisualSt5、udio.NET【实验目的】(1)了解Windows线程同步机制;(2)了解互斥体,并通过查阅资料理解互斥体对象的使用方法;(3)了解事件,并通过查阅资料理解事件对象的使用方法;(4)了解关键区,并通过查阅资料理解关键区对象的使用方法;(5)了解信号量,并通过查阅资料理解信号量对象的使用方法;(6)利用Windows线程同步机制,模拟生产者消费者问题。【实验要求】(1)逐程序进行简要分析、运行各程序并仔细阅读注释;(2)查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3)完成实验报告。【实验结果与分6、析】(1)2-1(mutex).cpp程序运行2-1(mutex).cpp结果:将两个子函数中注释掉的Sleep语句让其可用,运行结果:(2)2-2(event).cpp程序运行2-2(event).cpp结果:将两个子函数中注释掉的Sleep语句让其可用,运行结果:(3)2-3(critical_section).cpp程序运行2-3(critical_section).cpp结果:将两个子函数中注释掉的Sleep语句让其可用,运行结果:分析原因:2-1(mutex).cpp、2-2(event).cpp、2-7、3(critical_section).cpp的处理方式相同,不会出现销售出0号票的情况原因相同:修改之前,在指定暂停的时间Sleep(1000)内,thread1和thread2随机售票,出现多种情况;将两个子函数中注释掉的Sleep(1)语句让其可用后,thread1和thread2交替售票,即thread1在其暂停的时间Sleep(1)内,thread2获得了对共享对象hMutex的所有权,开始售票,同理当thread2在其暂停的时间Sleep(1)内,thread1获得了对共享对象hMutex的所有权,开8、始售票,这样thread1和thread2就实现了交替售票,不会出现销售出0号票的情况。(4)2-4(Producer_Consumer).cpp程序运行2-4(Producer_Consumer).cpp结果:将两个子函数中注释掉的while语句让其可用,运行结果:分析原因:修改之前,在指定暂停时间sleep(20)内,producer和consumer只能执行一次;将
4、返回再运行thread1isselltickets时就卖0号票了。【实验思考及总结】………………………(1)加入循环,使得两个进程可以交替执行。(2)Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以1/1000秒为单位的。(3)线程也有父子关系。父进程退出后子进程也会退出。(4)不可再现性:两个进程同时迈出同一部步,两个进程中存在共享变量。.实验二Windows线程同步机制【开发语言及实现平台或实验环境】C++/C#MicrosoftVisualStudio6.0/MicrosoftVisualSt
5、udio.NET【实验目的】(1)了解Windows线程同步机制;(2)了解互斥体,并通过查阅资料理解互斥体对象的使用方法;(3)了解事件,并通过查阅资料理解事件对象的使用方法;(4)了解关键区,并通过查阅资料理解关键区对象的使用方法;(5)了解信号量,并通过查阅资料理解信号量对象的使用方法;(6)利用Windows线程同步机制,模拟生产者消费者问题。【实验要求】(1)逐程序进行简要分析、运行各程序并仔细阅读注释;(2)查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3)完成实验报告。【实验结果与分
6、析】(1)2-1(mutex).cpp程序运行2-1(mutex).cpp结果:将两个子函数中注释掉的Sleep语句让其可用,运行结果:(2)2-2(event).cpp程序运行2-2(event).cpp结果:将两个子函数中注释掉的Sleep语句让其可用,运行结果:(3)2-3(critical_section).cpp程序运行2-3(critical_section).cpp结果:将两个子函数中注释掉的Sleep语句让其可用,运行结果:分析原因:2-1(mutex).cpp、2-2(event).cpp、2-
7、3(critical_section).cpp的处理方式相同,不会出现销售出0号票的情况原因相同:修改之前,在指定暂停的时间Sleep(1000)内,thread1和thread2随机售票,出现多种情况;将两个子函数中注释掉的Sleep(1)语句让其可用后,thread1和thread2交替售票,即thread1在其暂停的时间Sleep(1)内,thread2获得了对共享对象hMutex的所有权,开始售票,同理当thread2在其暂停的时间Sleep(1)内,thread1获得了对共享对象hMutex的所有权,开
8、始售票,这样thread1和thread2就实现了交替售票,不会出现销售出0号票的情况。(4)2-4(Producer_Consumer).cpp程序运行2-4(Producer_Consumer).cpp结果:将两个子函数中注释掉的while语句让其可用,运行结果:分析原因:修改之前,在指定暂停时间sleep(20)内,producer和consumer只能执行一次;将
此文档下载收益归作者所有