操作系统课程实验
实 验 报 告
操作系统课程组 编
实验内容: 实验1、实验2
姓名: 张梦圆 仇冠伦学号: 2016112127
2016112130
班级: 电子 2016-04 班成绩:
西南交通大学电气工程学院
报告格式要求
1 . .2 .3 .4
只需回答每个实验中“实验结果”,需抄写问题。
正文和标题皆使用小四号宋体字,标题需加粗。参见示例 1。
在回答问题涉及截图时,建议调整截图大小,使其适合阅读并节约版面。 在回答程序相关的问题时,建议灵活应用文本框和注解图形,以充分说明。参见示例 2。
除了程序正确,正确规范的语言表达也是实验要求重点。因此在实验中注意.5
训练文本表达,准确表述自己的工作重心和亮点。 示例 1:
实验 1-1. 基础练习
实验 1-1a. 创建命令行应用程序(Win32 Console Application)
1. 请说明使用的 Visual C++版本。
答: ……
2. 请对程序执行结果截图。
答: ……
3. 请在 Windows 文件资源管理器中找到该项目目录,请截图说明;并从中找到 main.cpp 文件、main.obj 和学号-1-1a.exe,亦请截图说明。 答: ……
示例 2: int main() { cout << “Hello world.” << endl; return 0; }
在命令行窗口输出字符串”Hello world”。 并退出 main 函数。 实验 1-1. 线程(Threads) 实验 1-1a. HelloWorld 程序
1. 请给出程序运行结果的截图。 答:
2. 请结合程序,分析线程 t1 何时被创建、运行和结束。 答:
int main() {
//Launch a thread
std::thread t1(call_from_thread); 创建线程 //Join the thread with the main thread
t1.join(); 等待子线程执行完毕之后再继续向下执行主线程 return 0; 线程结束 }
实验 1-1b. 多线程并发执行
1. 请给出程序运行结果的截图。 答:
2. 请分析程序输出结果是否固定。
答:主函数也是一条线程,通常叫做主线程,所以上面的代码实际上有 11 条线程在运行。程序创建线程组,其线程的运行存在先后秩序不确定的现象。
实验 1-1c. 线程中函数的参数 1. 请给出程序运行结果的截图。 答:
2. 请分析程序输出内容的格式不整齐的原因。 答:有 i+1 个线程在竞争运行,程序内的 11 条线程都在竞争性地使用 stdout 这个公共资源,所以输出结果不整齐。
实验 1-2. 线竞争状态(Race conditions) 1. 请给出程序运行结果的截图。 答:
2. 请结合程序,解释程序中线程为何出现竞争状态。
答:由于本例中使用多个线程模拟多个用户对广告的点击,存在多个线程同时访问同一个类(对象或方法),而在这种情况下,多个线程都能同时获取以及改变共享数据,竞争危害便发生了。因为各个线程对数据操纵的顺序并不可预知,因此数据改变的结果取决于线程最终的运行顺序。所有的线程都在 “Racing”(竞争)以优先获取数据改变数据。
实验 1-3. 互斥锁
实验 1-3a. 互斥锁(Mutex) 1 请给出程序运行结果的 .5 个截图。 答: