互斥锁原理

news2025/2/27 3:01:52

如果有交互的公共数据区域,我们需要让一个进程先执行,一个进程后执行,互斥锁就是用锁的方式让他们的竞争关系变得有序。
在这里插入图片描述

临界区问题
临界区是在程序之间有公共数据交互时产生的区域,没有两个进程可以在它们各自的临界区同时执行
在这里插入图片描述

临界区的i协议
在这里插入图片描述

临界区管理准则
临界区必须有一个进程,因为如果临界区为空且满足互斥性那么其他进程都无法在临界区运行,临界区运行的程序也不能一直占用临界区,必须要让其他进程等待时间为有限的。

在这里插入图片描述
喂养金鱼问题
在这里插入图片描述在这里插入图片描述上面代码还是会有问题
在这里插入图片描述

那么这段代码的临界区在哪里
这楼里fish和feed变量都是公共的,所以这块区域就是临界区
在这里插入图片描述

我们修改这段伪代码,将异步尝试转为同步
这里这个note代表一个记号,表示正在判断是否喂鱼,remove note走时候撕掉记号。

在这里插入图片描述但上个代码还是有问题
在这里插入图片描述我们再次修改伪代码
在这里插入图片描述

但这里金鱼就不是撑死了,是饿死了
违反了有空让进原则
在这里插入图片描述
那么对于计算机系统来说,饿死好,还是撑死好呢?
对于计算机数据来说,我认为是饿死更好,因为撑死就等于数据被修改为错误了,而饿死代表计算机的数据并没有被修改。

我们再次修改伪代码
空循环,让alice等待tom移除note

在这里插入图片描述我们再次分析
在这里插入图片描述

这里我自己对这个代码分析了一下:tom要执行需要满足alice没留下note,一但留下note,tom就无法喂食,而alice是一定会喂食的,所以这里需要alice这个设备性能比tom好

这两个算法和上面的算法思想是差不多的
在这里插入图片描述互斥锁
一个进程拿到锁,其他进程如果与这个进程互斥,那么再要取得锁的使用权,就会进入loop状态,进程使用完需要释放锁

在这里插入图片描述在这里插入图片描述

上锁和测试是不能被打断的
在这里插入图片描述既然我们知道了上锁和测试是不可以被打断的,我们引用一个原子操作的概念
在这里插入图片描述在这里插入图片描述
解决浪费cpu周期的缺点,我们可以将这个等待进程进入等待队列里,但是我们要注意,万一自旋的时间比切换队列消耗的时间更久,那么这个操作反而浪费了资源。
在这里插入图片描述

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

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

相关文章

我的 System Verilog 学习记录(1)

引言 技多不压身,准备开始学一些 System Verilog 的东西,充实一下自己,这个专栏的博客就记录学习、找资源的一个过程,希望可以给后来者一些借鉴吧,IC找工作的都加把油! 本文是准备先简单介绍一下环境搭建…

C++11智能指针std::shared_ptr介绍及使用

介绍 shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设 maxn\…

【C++】2.类和对象(上)

1.面向过程和面向对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 2.类的引入…

【发版或上线项目保姆级心得】

第一步:先在正式环境创建数据库/新增表格或者字段 在数据库表中增加字段/表格,不会报错。 但是切记不要过早数据库字段/表格或者删除字段/表格 第二步:修改配置文件 先将正式环境需要的配置给写好,包括但不仅限于数据库配置、…

秋招面试问题整理之机器学习篇

文章目录随机森林在决策树的哪些方面做出了改进随机森林里每棵树的权重不一定会变成什么模型方差和偏差,正则化解决的是方差大还是偏差大的问题正则化的方法总结了解VC维吗svd了解吗随机森林在决策树的哪些方面做出了改进 回答思路: 随机森林和决策树有…

同步syslog日志到服务端

目录结构前言Windows下安装syslog服务端(Syslog Watcher Manager)Linux下syslog服务端搭建java同步日志代码块日志同步测试前言 系统同步日志到syslog服务器,此文章记录以下内容: Windows下syslog服务端(Syslog Watc…

主食吃什么最健康?

又到了订饭的时候了,今天打算吃什么呢?面包?炒饭?面条?还是粥?上面说到的这些都是主食。大家都知道主食能带来很强的饱腹感,而且还是身体最重要、最经济的营养来源。但五谷杂粮,营养…

【项目】好用快搜文档搜索工具

文章目录一、项目分析1、项目调研2、项目需求3、开发环境4、项目知识框架5、项目实现基本理论二、项目设计整体框架设计代码框架设计三、项目实现1、系统工具模块目录遍历2、数据库管理模块2.1、封装数据库管理类(SqliteManager)2.2、封装数据管理类(DataManager)3、扫描模块4、…

紫外线生物素标记Biotin-PEG2-alkyne,UV Cleavable Biotin-PEG2-alkyne

UV Cleavable Biotin-PEG2-alkyne含有紫外线可切割碎片(containsa UV cleavable Fragemnt),试剂通过点击化学与含叠氮化物的分子反应。点击化学生物素标记试剂包含各种点击化学官能团修饰的生物素,适用于各种生物素标记实验。1.UV Cleavable Biotin-PEG2…

威马汽车:跃马扬鞭未竟,鞍马劳顿难行?

“活下去,像牲口一样地活下去。” 威马汽车创始人、董事长兼CEO沈晖1月在社交媒体上分享的电影台词,已然成为威马近况的真实写照。 来源:新浪微博威马汽车沈晖Freeman 最近,网上出现了大量关于“威马汽车将实施全员停薪留职”的…

【JavaScript速成之路】JavaScript数据类型转换

📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 文章目录前言数据类型转换1,转换为字符串型1.1,利用“”拼接转换成…

8、接口与面向接口编程

目录一、接口的基本概念二、类型断言三、面向接口编程一、接口的基本概念 接口的定义:接口是一组行为规范的集合 type Transporter interface { //定义接口,通常接口名以er结尾//接口里面只定义方法,不定义变量move(src string, dest strin…

10.现代循环神经网络

10.现代循环神经网络 目录 门控循环单元(GRU)门控隐状态 重置门和更新门候选隐状态 隐状态从零开始实现 初始化模型参数定义模型训练与预测 简洁实现总结 长短期记忆网络(LSTM) 门控记忆元 输入门、忘记门和输出门候选记忆元记忆…

基于xxx开发板的bluez的移植

基于xxx开发板的bluez的移植1.硬件电路2.软件准备2.1.源码配置2.2 编译源码3.请等待《题外话》:刚开始第一次接触bluez,完全没用过,也没搞过,开局一脸懵逼。刚好项目需要用到,只能硬着头皮上,淦淦淦&#x…

C语言之通讯录的实现

通讯录实现所需头文件和源文件 Contact.h的功能 声明函数和创建结构体变量 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #define MAX 1000 #define MAX_NAME 20 #define MAX…

npm 上传自己的包

mkdir demo 创建一个新的文件夹 npm init 初始化项目 生成一个package.json文件 name version description等等touch index.js 创建一个node 可执行脚本新的js 文件 #!/usr/bin/env node // 必须在文件头加如上内容指定运行环境为node console.log(hello cli)在package.json 中…

Zookeeper框架

Zookeeper框架概述 1.Zookeeper介绍 Zookeeper&#xff08;以下简称ZK&#xff09;是用来管理和协调其他框架的&#xff0c;很多框架需要依赖ZK&#xff08;例如Hadoop-HA&#xff0c;Kafka&#xff0c;HBase等&#xff09;ZK本身也是一个集群ZK本身也可以存数据(一般保存配置…

手撸一个Switch开关组件

一、前言 手撸系列又来了&#xff0c;这次咱们来撸一个Switch开关组件&#xff0c;废话不多说&#xff0c;咱们立刻发车。 二、使用效果 三、实现分析 首先我们先不想它的这个交互效果&#xff0c;我们就实现“不合格”时的一个静态页面&#xff0c;静态页面大致如下&#x…

GeoServer如何发布PostgreSQL里的数据?

GIS服务端避免不了将数据存储在pg库里。本篇我们来说如何将其发布在geoserver上。 我们讲的全面一点,尽量从0开始,让小白都能看得懂。 首先假设你有一份shape数据,你可以同过postgis插件导入到pg数据库中。 这里要注意:导入的shape文件和路径都不能含有中文! 导入之前…