操作系统:线程同步和调度

文章目录

线程同步和调度

一、实验目的

通过创建线程、分配线程优先级和终止线程的程序设计和调试操作,进一步熟悉操作系统的线程概念,理解Windows 2000线程的生命周期。

通过对事件、互斥体对象和信号量的了解,加深对Windows 2000线程同步的理解。

二、实验要求与内容、过程与结果

1、运行例程3-1,注意观察运行结果。请回答线程的实际工作在哪个方法中来实现的,并描述程序的功能。

程序功能:在DoStuff中实现将线程A与B的ID各输出5次。

2、修改例程3-1,创建两个线程MyThred1和MyThred2:线程MyThred1输出10次"A。。。" ,线程MyThred2输出10次"B^^^"。多次运行该程序,并注意观察输出结果是否一样?并回答在程序运行过程中,任务管理器中能看见这2个线程吗?(为了便于任务管理器观察线程的执行,可将循环次数设置大些。)

(1)多次运行该程序,观察到输出结果不一样。

(2)在程序运行过程中,任务管理器中能看见这2个线程。

3、运行例程3-2,线程A和线程B哪个先运行结束?为什么?将程序中语句:wtA.SetPriority(THREAD_PRI0RITY_L0WEST)

中的参数THREAD_PRI0RITY_L0WEST修改为THREAD_PRIORITY_HIGHEST后,再运行程序,输出结果有何不同?

修改前B先完成,因为A的优先级最低;修改后A先完成,因为A的优先级最高。

4、运行例程3-3,线程A和线程B哪个先运行结束?为什么?

线程A先结束,因为线程B挂起,只有在A执行完毕之后才继续执行。

5、运行例程3-4,写出屏幕中的输出信息,并请描述该程序的功能。

功能:创建和打开进程间的要发送信号的事件对象。

6、运行例程3-5,请描述该程序的功能。

功能:使用互斥体来保护共享资源。

7、运行例程3-6,请描述该程序的功能。

功能:使用信号量来限制活动线程数。

8、编写一个程序,利用信号量来实现多个生产者-消费者问题。


总结:

线程同步和调度是操作系统中非常重要的概念和技术,它们在多线程编程中扮演着重要的角色。在本文中,我们将简单介绍线程同步和调度的概念和实现方法。

一、线程同步

线程同步是指多个线程之间协调执行的过程,控制各个线程执行的顺序,保证它们的执行结果是正确的。线程同步可以防止多个线程同时访问或修改共享变量,从而避免由此产生的不一致性或错误。

常用的线程同步方法有互斥锁、信号量和条件变量。互斥锁是一种独占锁,它保证只有一个线程可以访问共享资源,其他线程则必须等待。信号量是一种计数锁,它维护了一个资源的计数器,线程可以获得或释放这些资源。条件变量则是用于线程的等待和通知机制,它可以让线程在某个条件成立时等待或唤醒。

二、线程调度

线程调度是指操作系统决定哪个线程可以运行的过程。操作系统的调度算法决定了每个线程被分配的处理时间和顺序。调度算法根据一些因素,如线程的优先级、I/O等待和执行时间等来决定每个线程的运行顺序。

常用的调度算法有先来先服务、短作业优先、轮转和多级反馈等。在先来先服务算法中,CPU将分配给最早发出请求的线程。在短作业优先算法中,长时间等待的任务将被延迟,因为较短的任务更容易完成。轮转算法将CPU时间分配给每个线程一定的时间片,每个线程轮流运行,以使所有线程都有机会获得相等的CPU时间。多级反馈算法则为每个线程分配不同的优先级,并将它们放入不同的队列中,以便更好地管理线程的执行。

总之,线程同步和调度是多线程编程的核心概念和技术。了解这些概念和方法,可以帮助程序员更好地编写多线程应用程序,提高程序的并发性和性能。

系列文章

实验 目录 直达链接
实验一 Linux初步 https://want595.blog.csdn.net/article/details/133145097
实验二 进程的控制和通信(Windows2000) https://want595.blog.csdn.net/article/details/133903234
实验三 线程同步和调度 https://want595.blog.csdn.net/article/details/133903419
实验四 单处理机调度 https://want595.blog.csdn.net/article/details/133903537
实验五 银行家算法 https://want595.blog.csdn.net/article/details/133903623
实验六 虚拟存储管理技术 https://want595.blog.csdn.net/article/details/133903701
相关推荐
智践行10 小时前
ROS2 Jazzy:高效使用回调函数(回调组)
操作系统
智践行10 小时前
ROS2 Jazzy:如何使用节点接口模板类访问节点信息(C++)
操作系统
心月狐的流火号11 小时前
计算机I/O模式演进与 Java NIO 直接内存
java·操作系统
444A4E16 小时前
深入理解Linux进程管理:从创建到替换的完整指南
linux·c语言·操作系统
JulyYu16 小时前
Android系统保存重名文件后引发的异常解决
android·操作系统·源码
有信仰3 天前
操作系统——进程和线程
操作系统
猪哥帅过吴彦祖4 天前
从源码到可执行文件:揭秘程序编译与执行的底层魔法
操作系统·编译原理·编译器
SundayBear4 天前
Autosar Os新手入门
车载系统·操作系统·autosar os
千里镜宵烛5 天前
深入理解 Linux 线程:从概念到虚拟地址空间的全面解析
开发语言·c++·操作系统·线程
OpenAnolis小助手6 天前
朗空量子与 Anolis OS 完成适配,龙蜥获得抗量子安全能力
安全·开源·操作系统·龙蜥社区·龙蜥生态