管程的定义和条件变量

这篇具有很好参考价值的文章主要介绍了管程的定义和条件变量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在信号量机制中,每个要访问临界资源的进程都必须自备同步的PV操作,大量分散的同步操作给系统管理带来了麻烦,且容易因同步操作不当而导致系统死锁。于是,产生了一中新的进程同步工具——管程。管程的特性保证了进程互斥,无需程序员自己实现互斥,从而降低了死锁发生的可能性。同时管程提供了条件变量,可以让程序员灵活地实现进程同步

管程的定义

系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节

利用共享数据结构抽象地表示系统中的共享资源,而把对该数据结构实施的操作定义为一组过程。进程对共享资源的申请、释放等操作,都通过这组过程来实现,这组过程还可以根据资源情况,或接受或阻塞进程的访问,确保每次仅有一个进程使用共享资源,这样就可以统一管理对共享资源的所有访问,实现进程互斥。这个代表共享资源的数据结构以及由对该共享数据结构实施的一组过程所组成的资源管理程序,称为管程。管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。

由上述定义可知,管程由4部分组成

1:管程的名称
2:局部于管程内部的共享数据结构说明
3:对该数据结构进程操作的一组过程(或函数)
4:对局部于管程内部的共享数据设置初始值的语句

管程把对共享资源的操作封装起来,管程内的共享数据结构只能被管程内的过程所访问。一个进程只有通过管程内的过程才能进入管程访问共享资源。

每次仅允许一个进程进入管程,从而实现进程互斥。若多个进程同时调用申请资源操作,归还资源操作,则只有某个基础讷航运行完它调用的过程后,下个进程才能开始运行它调用的过程。也就是说,各个进程只能串行执行管程内的过程,这一特性保证了进程“互斥”访问共享数据结构S

条件变量

当一个进程进入管程后被阻塞,知道阻塞的原因解除时,在此期间,如果该进程不释放管程,那么其他进程无法进入管程。为此,将阻塞原因定义为条件变量condition。通常,一个进程被阻塞的原因可以有多个,因此在管程中设置了多个条件变量。每个条件变量保存了一个等待队列。用于记录因该条件变量而阻塞的所有进程,对条件变量只能进程两种操作,即wait和signal

1:x.wait:当x队列的条件不满足时,正在调用管程的进程调用x.wait将自
己插入x条件的等待队列,并释放管程。此时其他进程可以使用该管程

2:x.signal :x对应的条件发生了变化,则调用x.signal,唤醒一个因x
条件而阻塞的进程

条件变量和信号量的比较:

相同点:条件变量的wait/signal 操作类似于信号量的PV操作,可以实现进程的阻塞/唤醒

不同点:条件变量是“没有值”的,仅实现了“排队等待”功能;而信号量是“有值”的,信号量的值反映了剩余资源数,而在管程中,剩余资源数用共享数据结构记录文章来源地址https://www.toymoban.com/news/detail-658570.html

到了这里,关于管程的定义和条件变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL Linux自建环境备份至远端服务器自定义保留天数

    linux下安装mysql请看 Linux环境安装单节点mysql8.0.16 系统版本: CentOS 7 软件版本: mysql8.0.16 此次备份依赖mysql自带命令mysqldump与linux下crontab命令(定时任务) mysqldump mysqldump客户实用程序执行 逻辑备份,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。它转储一

    2024年02月13日
    浏览(52)
  • 服务器安装 anaconda & conda: command not found [解决方案] & bashrc文件中环境变量配置错误,导致linux命令无法正常使用的解决方案

    由于连接的服务器,无法直接在anaconda官网上下载安装文件,所以使用如下方法: 之后一直按 enter ,直到出现提示要输入 yes or no ,输入 yes 显示以下信息即为安装成功 在终端输入conda info --envs查看anaconda是否安装成功,发现报错:conda: command not found 原因在于: ~/.bashrc文件没

    2024年02月06日
    浏览(88)
  • 幻兽帕鲁/Palworld怎么创建服务器 幻兽帕鲁/Palworld服务器创建有什么条件分享

    幻兽帕鲁如何搭建服务器?幻兽帕鲁游戏元素非常丰富,很多小伙伴想自己和朋友玩,很多小伙伴问小编幻兽帕鲁如何搭建服务器,下面小编就为大家带来了幻兽帕鲁搭建服务器方法介绍。 本文将为大家详细介绍如何在阿里云上快速部署幻兽帕鲁联机服务器,无需手动部署,

    2024年02月20日
    浏览(51)
  • Linux分布式应用 Zabbix监控配置[添加主机 自定义监控内容 邮件报警 自动发现/注册 代理服务器 高可用集群]

    关闭防火墙  服务端和客户端都配置时间同步 服务端和客户端都设置 hosts 解析 设置 zabbix 的下载源,安装 zabbix-agent2 修改 agent2 配置文件 启动 zabbix-agent2 在服务端验证 zabbix-agent2 的连通性 在 Web 页面中添加 agent 主 机 点击左边菜单栏【配置】中的【主机】,点击【创建主机

    2024年02月13日
    浏览(55)
  • vscode无法ssh远程连接到服务器:远程主机可能不符合 glibc 和 libstdc++ VS Code 服务器的先决条件

    今天vscode自动更新后无法连接到远程服务器了,提示\\\" 远程主机可能不符合 glibc 和 libstdc++ VS Code 服务器的先决条件 \\\" 并且命令窗口一直显示\\\" Waiting for server log… \\\" 困扰了我很久,发现主要原因是vscdoe自动更新到了1.86版本,与我远程服务器的glibc版本不符   我是使用了vscode1

    2024年02月22日
    浏览(51)
  • MySQL 5.7服务器系统变量参考

     官网地址:MySQL :: MySQL 5.7 Reference Manual :: 5.1.4 Server System Variable Reference 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. MySQL 5.7 参考手册  /  ...  /  服务器系统变量参考 5.1.4 服务器系统变量参考 下表列出了 中适用的所有系统变量  mysqld 。 该表在

    2024年02月03日
    浏览(37)
  • 在服务器上安装pytorch并配置CUDA环境变量

    (1) 使用以下命令来查看安装在服务器上的NVIDIA驱动程序版本: 这将显示有关安装的NVIDIA驱动程序的详细信息,包括版本号。 (2)使用以下命令来查看CUDA版本: 本服务器上NVIDIA驱动程序版本:460.56;CUDA版本:11.2 (1)打开终端或命令提示符,并激活您的Anaconda环境(如果

    2024年04月26日
    浏览(51)
  • 从零开始实现一个C++高性能服务器框架----环境变量模块

    此项目是根据sylar框架实现,是从零开始重写sylar,也是对sylar丰富与完善 项目地址:https://gitee.com/lzhiqiang1999/server-framework 项目介绍 :实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括

    2024年02月02日
    浏览(52)
  • coding 自定义节点服务器

    在root账号下  选择手动接入 安装客户前,请检查环境依赖。如何安装环境依赖? · Python 3.6, 3.7, 3.8, 3.9 · Git = 2.8 · Java 8 或 11 以及 Jenkins 1. 创建工作目录并进入工作目录 创建 codingci/tools 进入 codingci/tools  安装java11 (Python和git 系统自带 查看版本是否支持)  2.在上述工作

    2024年02月09日
    浏览(51)
  • 服务器渲染+自定义模块+mysql操作

    A.第一步,导入模块库和第三方库 npm init npm --registry https://registry.npmmirror.com install art-template moment B.第二步,调整html文件 调整js文件 效果图: 通过前面几个章节的学习,我们基本掌握了NodeJS编程的基础知识,但是我们也直观的发现了一个问题,和我们之前学习浏览器编程时

    2024年01月25日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包