天津科技大学操作系统实验报告.docVIP

  • 138
  • 0
  • 约2.32万字
  • 约 44页
  • 2016-12-03 发布于重庆
  • 举报
天津科技大学操作系统实验报告

2015-2016学年第一学期 专 业:计算机科学与技术 班 级: 学 号: 姓 名: 日 期: 实验一 Windows多线程 【开发语言及实现平台或实验环境】 C++/C# Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 【实验目的】 (1) 进一步理解操作系统的并发性; (2) 了解Windows线程创建方法,并通过查阅资料理解各参数的含义; (3) 了解多线程程序设计方法,并进行简单应用。 【实验要求】 (1) 逐程序进行简要分析、运行各程序并仔细阅读注释; (2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义; (3) 完成实验报告。 【实验结果与分析】 (1)1-1.cpp程序 运行1-1.cpp结果: 将main函数中注释掉的Sleep语句让其可用,运行结果为: 分析原因: Sleep(0)的作用为语句可观察线程1和主线程并发执行。输出结果“main thread is running /thread1 is running”。没有添加的线程1运行结束只输出“main thread is running”。 (2)1-2.cpp程序 运行1-2.cpp结果: 分析原因: 1-2.cpp文件使用的是时间片轮转方法调度的主线程、线程1、线程2.因此不需要sleep语句就可将主线程调度。因为在两个线程中存在共享变量,因此执行结果出现不可再现性。 (3)1-3.cpp程序 运行1-3.cpp结果: 将main函数中注释掉的Sleep语句让其可用,运行结果为: 将两个子函数中注释掉的Sleep语句让其可用,运行结果: 分析原因: 加入两个sleep(1)后,有可能到thread1 is sell tickets:时间片就停了,tickets没--,还可以运行thread2 is sell tickets:tickets—也就是说tickets变为0,返回再运行thread1 is sell tickets时就卖0号票了。 【实验思考及总结】 ……………………… (1)加入循环,使得两个进程可以交替执行。 (2)Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以1/1000秒为单位的。 (3)线程也有父子关系。父进程退出后子进程也会退出。 (4)不可再现性:两个进程同时迈出同一部步,两个进程中存在共享变量。 . 实验二 Windows线程同步机制 【开发语言及实现平台或实验环境】 C++/C# Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 【实验目的】 (1) 了解Windows线程同步机制; (2) 了解互斥体,并通过查阅资料理解互斥体对象的使用方法; (3) 了解事件,并通过查阅资料理解事件对象的使用方法; (4) 了解关键区,并通过查阅资料理解关键区对象的使用方法; (5) 了解信号量,并通过查阅资料理解信号量对象的使用方法; (6) 利用Windows线程同步机制,模拟生产者消费者问题。 【实验要求】 (1) 逐程序进行简要分析、运行各程序并仔细阅读注释; (2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义; (3) 完成实验报告。 【实验结果与分析】 (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-3(critical_section).cpp的处理方式相同,不会出现销售出0号票的情况原因相同: 修改之前,在指定暂停的时间Sleep(1000)内,thread1和thread2随机售票,出现多种情况;将两个子函数中注释掉的Sleep(1)语句让其可用后,thread1和thread2交替售票,即thread1在其暂停的时间Sleep(1)内,thread2获得了对共享对象hMutex的所有权,开始售票,同理当thr

文档评论(0)

1亿VIP精品文档

相关文档