线程同步——管程

news2024/9/25 7:17:51

管程是允许线程具有互斥、等待(堵塞)某个条件为false的能力的同步结构。具有通知其他线程他们特定条件已经满足的机制。管程为线程提供了可以暂时放弃独占访问,以便在重新获得独占访问并恢复任务之前等待满足某些条件。

管程有互斥锁以及特定条件变量组成。条件变量本质上是等待特定条件的线程的容器

互斥:同一时刻只允许一个线程访问共享资源

同步:线程之间通信、协作

// thread 1
synchronized(someObject) {
  // do something x
}

// thread 2
synchronized(someObject) {
  // do something y
}

// 在Java中的管程会控制仅有一个线程在临界区中执行,并且没有显性的wait、notify

条件变量

条件变量是等待特定条件发生的同步原语,用于维护等待队列,也有wait()、signal(),只是不能累积数量

  • wait(c):调用进程被阻塞并移入与条件变量c相关的队列中,并释放管程,直到另一个进程在该条件变量c上执行signal(c)唤醒等待进程并将其移出c的队列。
  • signal(c):如果存在其他进程由于执行wait(c)而被阻塞,便释放一个;如果没有进程在等待,那么信号被丢弃而不会产生任何效果。

优缺点

优点:

  • 相比于信号量更容易实现
  • 监控器可以克服使用信号量时出现的时序错误。比如生产者消费者中,在生产者还没有堵塞之前就给生产者发送了释放信号

缺点:

  • 必须被编程语言实现
  • 给了编译器额外负担去了解操作系统哪些特性可用来控制并发进程中临界区的访问

与信号量的不同

  • 信号量是整型变量,允许多个进程管理对公共资源的访问;而管程则是同步技术,允许线程相互排斥,并wait()特定条件为true
  • 当进程对共享资源使用信号量时,调用wait()方法堵塞资源,调用signal()释放资源;管程则是通过管程结构在进程中访问
  • 信号量是整数,管程则是抽象数据结构
  • 信号量的整数表明了可用资源数量,而管程则是一个在同一时间只允许一个进程在临界区执行的抽象数据结构
  • 信号量没有条件变量的概念,管程有条件变量

总结来说,管程是将信号量分散的wait、notify封装起来,更利于编程。

管程是一个模型,与信号量并非不相交,实际上在很多语言管程实现中,互斥部分是通过信号量来实现的

在这里插入图片描述

Ref

  1. https://en.wikipedia.org/wiki/Monitor_(synchronization)
  2. https://www.cnblogs.com/binarylei/p/12544002.html
  3. https://www.javatpoint.com/semaphore-vs-monitor#:~:text=are%20as%20follows%3A-,A%20semaphore%20is%20an%20integer%20variable%20that%20allows%20many%20processes,given%20condition%20to%20become%20true.

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

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

相关文章

趣味三角——第15章——傅里叶定理

第15章 傅里叶定理(Fourier’s Theorem) Fourier, not being noble, could not enter the artillery, although he was a second Newton. (傅立叶出生并不高贵,因此按当时的惯例进不了炮兵部队,虽然他是第二个牛顿。) —Franois Jean Dominique Arag…

Mini Pupper在ROS中的仿真

Mini Pupper在ROS中的仿真 课程概述 在这个课程中,你将会学习Mini Pupper结合Rivz和Gazebo的实例应用。你将使用Rviz可视化机器人模型,并在Gazebo仿真环境中实现Mini Pupper的键盘移动控制,然后带着Mini Pupper在你搭建的虚拟世界中散步。 关…

dorcker与vlu靶场搭建

dorcker与vlu靶场搭建 dorcker安装 以kali linux 为例 安装必要的一些系统工具 apt update apt -y install apt-transport-https ca-certificates curl software-properties-common 添加Docker PGP key curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg …

【JavaSE】数组的定义与使用详解

目录 1.数组的基本概念 1.1数组的好处 1.2什么是数组 1.3数组的定义及初始化 1.3.1数组的创建 1.3.2数组的初始化 1.4数组的使用 1.4.1访问数组中的元素 1.4.2遍历数组 2.数组的类型 2.1认识JVM的内存分布 2.2基本类型变量与引用类型变量 2.3认识null 3.数组的应…

(蓝桥真题)分果果(动态规划)

题目链接:P8746 [蓝桥杯 2021 省 A] 分果果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例1输入: 5 2 6 1 2 7 9 样例1输出: 0 样例2输入: 5 5 6 1 2 7 9 样例2输出: 2 分析:这道题的状态表…

第十二章 opengl之模型加载(Assimp)

OpenGLAssimp模型加载库构建Assimp网格网格渲染Assimp 我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们要的是将这些模型(Model)导入(Import)到程序当中。模型通常都由3D艺术家在Blender、3DS Max或者Maya这样的工具中精心制…

备份时间缩短为原来 1/4,西安交大云数据中心的软件定义存储实践

XEDP 统一数据平台为西安交通大学云平台业务提供可靠的备份空间和强大的容灾能力,同时确保数据安全。西安交通大学(简称“西安交大”)是我国最早兴办、享誉海内外的著名高等学府,是教育部直属重点大学。学校现有兴庆、雁塔、曲江和…

strace 用法介绍

strace 是什么 strace 是一个可用于诊断和调试的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 strace 作为一种动态跟踪工具,能够帮助我们高效地定位进程和服务故障。它像是一个侦探&…

企业电子招投标采购系统源码之系统的首页设计

​​ 功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为…

ThreadLocal解析

ThreadLocal是一个存储线程本地变量的对象,在ThreadLocal中存储的对象在其他线程中是不可见的,本文介绍ThreadLocal的原理。 1、threadLocal使用 有如下代码: Slf4j public class TestThreadLocal {public static void main(String[] args…

干货!设备管理包括哪些内容?

本文将为您介绍:1、设备管理的内容有哪些2、好用的设备管理软件; 设备管理在企业管理中非常重要:设备是企业安全生产的前提,没有安全生产,一切工作都可能是无用功; 而好的设备管理可以极大地提高生产效率…

【数据库】MySQL数据库约束(六大约束)

目录 1.数据库约束 1.1约束类型 1.2 非空约束(NOT NULL ) 1.3 唯一约束(UNIQUE) 1.4默认值约束(DEFAULT ) 1.5主键约束(PRIMARY KEY) 1.6外键约束(FOREIGN KEY &…

安全漏洞修复帖

对于项目漏洞都是一堆又不重要又很重要的事情一、修复HTTP 响应头缺失NginxTomcat响应头:值二、会话 Cookie 中缺少 secure 属性三、Html form 表单没有 CSRF 防护Security的示例Shiro的示例四、Host 头攻击NginxTomcatApache五、开启 options 方法一、修复HTTP 响应…

【设计模式】适配器模式和桥接模式

适配器模式 适配器模式 : 就是将一个类的接口变成客户端所期望的另一种接口,使得原本因为接口不匹配而无法一起工作的接口可以正常工作。属于结构型模式 比方说我有一个A牌子的奶瓶,然后买了个B牌子的奶嘴,不能匹配怎么办? 再买一个转换器…

Python3-输入和输出

Python3 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用。 如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。…

2020蓝桥杯真题洁净数 C语言/C++

题目描述 小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2,小明将它称为洁净数。 请问在整数 1 至 n 中,洁净数有多少个? 输入描述 输入的第一行包含一个整数 n(1≤n≤10^6)。 输出描述 输…

VS Code 解决 SpringBoot 项目启动时报 Failed to refresh live data from process **** 的问题

问题 SpringBoot 启动后 ,VS Code 报错 Failed to refresh live data from process ****。 现场是,SpringBoot 项目启动时,VS Code 将进行如下刷新,图片如下所示 当刷新 10 次以后,如果还是失败,则会抛出…

C++ queue的以及优先级队列(堆)的介绍和使用

因为队列与之前学习的栈等使用方法比较类似,所以对此进行简单介绍1 queue的介绍1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容…

基于RK3588人工智能大算力5网口工业交换机

RK3588是瑞芯微旗下最新的8K旗舰SoC芯片,采用ARM架构,主要用于PC、个人移动互联网设备、边缘计算和其他数字多媒体应用。RK3588集成了四核Cortex-A76和四核Cortex-A55,以及单独的NEON协处理器,支持8K视频编解码。许多功能强大的嵌…

肠道菌群与健康:探究发酵食品、饮食方式、益生菌和后生元的影响

谷禾健康 肠道微生物群之间编织了一个复杂的相互作用网络,影响人体的营养吸收和代谢,免疫功能等,对我们的健康状态有很大的影响。 我们知道,肠道微生物群具有多样性,平衡性,稳定性等特征,但同时…