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

文章目录

  • 线程同步和调度
    • 一、实验目的
    • 二、实验要求与内容、过程与结果
  • 系列文章

线程同步和调度

一、实验目的

通过创建线程、分配线程优先级和终止线程的程序设计和调试操作,进一步熟悉操作系统的线程概念,理解Windows 2000线程的生命周期。
通过对事件、互斥体对象和信号量的了解,加深对Windows 2000线程同步的理解。

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

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

1

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

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

2

3、运行例程3-2,线程A和线程B哪个先运行结束?为什么?将程序中语句:wtA.SetPriority(THREAD_PRI0RITY_L0WEST)
中的参数THREAD_PRI0RITY_L0WEST修改为THREAD_PRIORITY_HIGHEST后,再运行程序,输出结果有何不同?
3.1 3.2

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

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

4

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

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

5

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

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

6

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

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

7

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

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

总结:

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

一、线程同步

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

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

二、线程调度

线程调度是指操作系统决定哪个线程可以运行的过程。操作系统的调度算法决定了每个线程被分配的处理时间和顺序。调度算法根据一些因素,如线程的优先级、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18-spring 事务

文章目录 1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图1. xml和注解配置方式的对象 2.spring事务传播特性 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事…

RHEL 8.6 Kubespray 1.23.0 install kubernetes v1.27.5

文章目录 1. 预备条件2. download01 节点 安装 dockerdownload01 节点 介质下载下载 bastion01节点配置 yum 源bastion01 节点安装 docker5. 安装 docker insecure registrybastion01 部署 nginx 与 镜像入库13.1 配置 config.sh13.2 配置 setup-docker.sh13.3 配置 start-ngin…

Unity中Shader实现UI流光效果

文章目录 前言一、实现思路1:1、采集两张贴图,一张是主纹理,一张是扫光纹理2、在 v2f 定义一个二维变量 “uv2” 来存放 uv 偏移后的值3、在顶点着色器中,仿照之前的 uv 流动效果,与 _Time相乘后存放于 uv2 中4、最后,…

任务分配问题(回溯法)

算法设计 问题描述 有n(n≥1)个任务需要分配给n个人执行,每个任务只能分配给一个人,每个人只能执行一个任务。 第i个人执行第j个任务的成本是c[i][j](1≤i,j≤n)。求出总成本最小的分配方案 …

【JVM】synchronized与锁升级

文章目录 1. synchronized锁优化背景2. synchronized锁性能优化过程2.1 java5以前2.2 monitor锁2.3 java6开始 3. 无锁4. 偏向锁4.1 背景4.2 理论落地4.3 技术实现4.4 偏向锁的撤销4.5 题外话 5. 轻量级锁5.1 轻量级锁的加锁5.2 轻量级锁的释放5.3 锁升级 6. 重量级锁7. 锁升级…

springweb+vue前后端分离开发,集成部署

背景: 在自己做测试的时候,由于需要项目和项目的前端页面使用同样接口访问,所以需要将前端代码部署到后端项目下。前端采用vue,后端采用springboot。 首先时建立一个vue项目,这个可以参照网上的案例,创建方…

Node.js的安装

直接在浏览器中搜索Node.js即可 打开下载好的文件 验证是否安装成功 在cmd中输入 node -v,若结果为版本号那就是成功的 环境配置 配置全局模块所在的路径缓存cache的路径 在安装目录中新建两个文件夹,文件夹名为:node_cache和node_global 输…

C++之this指针

前言 C中对象模型和this指针是面向对象编程中的重要概念。对象模型描述了对象在内存中的布局和行为,包括成员变量、成员函数的存储方式和访问权限。this指针是一个隐含的指针,指向当前对象的地址,用于在成员函数中引用当前对象的成员变量和成…

搭建伪分布式Hadoop

文章目录 一、Hadoop部署模式(一)独立模式(二)伪分布式模式(三)完全分布式模式 二、搭建伪分布式Hadoop(一)登录虚拟机(二)上传安装包(三&#xf…

VMware Workstation里面安装ubuntu20.04的流程

文章目录 前言一、获取 desktop ubuntu20.04 安装镜像二、VMware Workstation下安装ubuntu20.041. VMware Workstation 创建一个新的虚拟机2. ubuntu20.04的安装过程3. 登录ubuntu20.044. 移除 ubuntu20.04 安装镜像总结参考资料前言 本文主要介绍如何在PC上的虚拟机(VMware W…

WordPress SMTP邮件发送插件 Easy WP SMTP

Easy WP SMTP是一款 WordPress 邮件发送插件,WordPress 中经常用到邮件发送,包括新注册用户的邮件通知、找回密码通知、评论回复通知等。因为云服务器默认不启用 SMTP功能,所以需要安装 SMTP插件来解决这个问题。 SMTP 主机:smtp.…

javascript/python 笔记: folium feature group自动切换

1 python部分 python部分只能是静态的结果 1.1 导入库 import folium import math 1.2 数据 cell_lst表示基站位置,location_lst表示 用户实际位置(均为伪数据) cell_lst[[1.341505, 103.682498],[1.342751, 103.679604],[1.341505, 10…

YCSB and TPC-C on MySQL(避免重复load)

一、编译安装MySQL 下载mysql5.7.28源码 https://downloads.mysql.com/archives/community/ Select Operating System 选择 Source Code Select OS version 选择 All Operating Systems 选择带有boost的版本 安装系统包 apt -y install make cmake gcc g perl bison libai…

虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?

现代物流领域迅速融入了技术进步,特别是随着自主机器人的兴起,这一趋势越发明显。确保这些机器人在复杂的仓库环境中精确运行的一个关键方面是CANopen通信协议。该协议集成了各种组件(电机、传感器、摄像头和先进的电池系统)&…

vue视频直接播放rtsp流;vue视频延迟问题解决;webRTC占cpu太大卡死问题解决;解决webRTC播放卡花屏问题:

播放多个视频 <div class"video-box"><div class"video"><iframe style"width:100%;height:100%;" name"ddddd" id"iframes" scrolling"auto" :src"videoLeftUrl"></iframe>&l…

轴承寿命相关细节的研究

数据集PHM2012 介绍一下IEEE PHM2012数据集_phm2012轴承数据集-CSDN博客 标签如何设置的? 剩余寿命预测的标签设置_rul 标签_兔子牙丫丫的博客-CSDN博客 参考自刘硕师兄的毕业答辩PPT 图 4.9 训练数据的切分方法 数据段的重叠切分&#xff0c;不仅可以覆盖更多的标签数据…

任务调度框架-如何实现定时任务+RabbitMQ事务+手动ACK

任务调度框架 Java中如何实现定时任务&#xff1f; 比如&#xff1a; 1.每天早上6点定时执行 2.每月最后一个工作日&#xff0c;考勤统计 3.每个月25号信用卡还款 4.会员生日祝福 5.每隔3秒&#xff0c;自动提醒 10分钟的超时订单的自动取消&#xff0c;每隔30秒或1分钟查询…

Redis在分布式场景下的应用

分布式缓存 缓存的基本作用是在高并发场景下对应服务的保护缓冲 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; redis由于高强度性能采用内存 但是意味着丢失的风险单结点redis并发能力有限分布式服务中数据过多 依赖内存的redis 明显单机不…

微信小程序自定义组件及投票管理与个人中心界面搭建

14天阅读挑战赛 人生本来就没定义&#xff0c;任何的价值都是自己赋予。 目录 一、自定义tabs组件 1.1 创建自定义组件 1.2 tabs.wxml 编写组件界面 1.3 tabs.wxss 设计样式 1.4 tabs.js 定义组件的属性及事件 二、自定义组件使用 2.1 引用组件 2.2 编写会议界面内容 …

DTI综述(更新中)

Deep Learning for drug repurposing&#xff1a;methods&#xff0c;datasets&#xff0c;and applications 综述读完&#xff0c;觉得少了点东西&#xff0c;自己写个DTI综述 Databases(包括但不限于文章中的) DATABASEDESCRIBEBindingDB有详细的drug信息和对应的target&a…