CHS_04.2.3.3+互斥锁

CHS_04.2.3.3+互斥锁

  • 进程互斥:锁

接下来 用于实现互斥的一种方法 你可以简单理解为 锁就是一个bool的变量

进程互斥:锁

在这里插入图片描述

只有true和false或者零和一两种状态分别表示当前已上锁或者没有上锁

有这样的两个函数可以操作锁acquire 这个函数就是上锁获得 锁

而release可以释放锁 那用锁实现互斥的主要缺点就是忙等

如果进不了临界区 就会不断的外物循环被卡在这忙等 这就会导致cpu资源的浪费 违反了让权等待的原则

由于忙等的过程中需要不断的循环检查 因此这类的锁通常把称为自旋锁

自己在原地旋转跳跃 闭着眼 像 我们之前学过tsl指令 swap指令以及单标志法

这些都属于自旋锁 那无论是哪种自旋锁 总之都是用于解决进程互斥的问题的

同时 锁有的这些自旋锁包括这介绍的互斥锁都有忙等的问题 都违反了让权等待的原则

那值得一提的是 如果一个进程在忙等暂时进不了临界区 那么他并不会一直占用处理机

如果这个进程它的时间片用完 那调度程序依然会让它下处理机 所以并不是忙等 就会一直占用处理机 它的时间片还是会用完的

那这种忙等的特性其实也有它的优点 因为在等待锁的期间不需要切换进程的上下文 切换进程的上下文其实

大家还是蛮大的 对吧 所以在多处理器的系统当中 如果对临界区上锁的时间很短

那么 这种自旋等待其实代价反而会很低 在多处理器的系统当中

如果某一个进程p一此时正在自旋等待 那么他只会吃掉这一个核的一个计算能力

那如果此时上锁的进程p二也在某一个核心里面运行 那p二是不是很有可能在接下快速的使用好临界区 然后快速的解锁

解锁了之后 这个p一在自旋等待的过程当中是不是突然就会发现哦 解锁了那他是不是就可以顺利的进入临界区

而这个自旋忙等的过程由于没有发生进程切换 因此忙等的代价反而是很低的

所以自旋锁的这种策略通常会用于多处理器的系统当中一个核 此时可能它的运算能力会被吃掉 在忙等

但其他核可以照常工作并且快速的释放 临界区正自旋锁就不太适用于单处理机系统

因为如果是单处理机系统的话 p一进程 此时他吃掉了唯一一个核 对吧 他在这个时间片的有可能等到被解锁吗 不可能

只有他这个时间片用完并且上锁的那个进程上处理机然后解锁之后

他才有可能获得这个锁 所以在单处理机系统当中 他不可能说这个自旋等着等着 哎 突然就获得锁了 不会发生这种情况
在这里插入图片描述

因此 这样自旋锁更适用于多处理机的系统好 这就是新考点锁用于实现进程互斥

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

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

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

相关文章

WPF应用程序(.Net Framework 4.8) 国际化

1、新建两个资源字典文件zh-CN.xaml和en-US.xaml&#xff0c;分别存储中文模板和英文模板 (1) zh-CN.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&q…

【乳腺肿瘤诊断分类及预测】基于LVQNN学习向量量化神经网络

课题名称&#xff1a;基于LVQ神经网络的乳腺肿瘤诊断&#xff08;类型分类&#xff09; 版本日期&#xff1a;2023-03-10 运行方式: 直接运行0501_LVQ0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院…

鸿蒙系统扫盲(七):勘误补充总结,收个尾

这是笔者鸿蒙扫盲系列的最后一篇了&#xff0c;准备对过去的六篇扫盲系列文章&#xff0c;错误的地方做一些勘误&#xff0c;并且补充更新一些朋友们感兴趣的知识&#xff0c;最后收个尾。 1.勘误&#xff0c;编译型语言和解释型语言 在鸿蒙系统扫盲&#xff08;五&#xff0…

【数据结构】双向带头循环链表实现及总结

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 双向带头循环链表的实现2. 顺序表和链表的区别 1. 双向带头循环链表的实现 List.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <stdbool.h>typede…

远程访问@HttpExchange

提示&#xff1a;这是SpringBoot3以上的新特性。 远程访问HttpExchange 一、webClient二、Http 服务器接口的方法定义三、声明式 HTTP 远程服务 远程访问是开发的常用技术&#xff0c;一个应用能够访问其他应用的功能。Spring Boot 提供了多种远程访问技术。基于 HTTP 协议的远…

如何做好测试用例执行 ?需要注意什么 ?这两点你需要知道。

提起测试用例的执行 &#xff0c;可以说是一个简单到再不能简单的话题 &#xff0c;很多刚入行的测试人员 &#xff0c;因测试经验有限或对业务不熟悉 &#xff0c;往往在刚开始的时候都是做测试用例的执行工作 。当然 &#xff0c;也正是觉得这个工作简单 &#xff0c;所以很多…

盘点Python网页开发轻量级框架Flask知识

目录 一、Flask框架概述 二、核心组件 1、WSGI服务器 2、Jinja2模板引擎 3、URL路由 4、数据库集成 三、应用场景 博客平台 内容管理系统&#xff08;CMS&#xff09; API开发 四、优缺点 优点&#xff1a; 缺点&#xff1a; 五、总结 随着Web开发的日益普及&…

达梦数据库的最大连接数,怎么查看和设置

达梦数据库是国内领先的数据库产品开发服务商&#xff0c;国内数据库基础软件产业发展的关键推动者。公司为客户提供各类数据库软件及集群软件、云计算与大数据等一系列数据库产品及相关技术服务&#xff0c;致力于成为国际顶尖的全栈数据产品及解决方案提供商。 此公司服务于包…

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者&#xff1a;张铭辉、泮圣伟 前言 随着春节大促即将到来&#xff0c;为了确保线上业务高效稳定地运行&#xff0c;电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求&#xff0c;来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…

flutter module打包成framework引入原生工程

Flutter - 将 Flutter 集成到现有项目&#xff08;iOS - Framework篇&#xff09; 本篇文章大幅参考了 caijinglong 大佬的总结文章&#xff1a; 把flutter作为framework添加到已存在的iOS中[1] 用 Flutter 来开发&#xff0c;从来都不可能是新开的一个纯 Flutter 项目&#xf…

LeetCode160. 相交链表

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;…

使用Promethues+Grafana监控Elasticsearch

PromethuesGrafana监控Elasticsearch 监控选用说明指标上报流程说明实现监控的步骤搭建elasticsearch-exporter服务搭建promethues和grafana服务 监控选用说明 虽然用Kibana来监控ES&#xff0c;能展示一些关键指标&#xff0c;但ES本身收集的指标并不全面&#xff0c;还需要在…