临界资源与临界区、互斥与同步、原子性概念介绍
目录
一、临界资源与临界区
二、互斥的概念
三、同步的概念
四、原子性的概念
一、临界资源与临界区
临界资源:凡是能被多个执行流同时访问的资源就是临界资源!(比如多个线程访问同一个全局变量,这里的全局变量就是临界资源)
临界区:我们写的代码中,并非所有的代码都会访问临界资源,其中访问临界资源的代码区域,就叫做临界区
二、互斥的概念
互斥 的目的是保护临界区,其实本质上就是保护临界资源。那么什么是互斥呢??
线程逻辑冲突是因为同一份临界资源被多个线程访问,那么互斥就是任意时刻,只能有一个执行流访问临界区或者访问临界资源。就好比食堂大妈不能同时给多个同学打饭,在给一个同学打饭的时候,其他同学就无法打饭。
三、同步的概念
同步的目的是在互斥的基础上保证公平性和顺序性。如果因为某个线程优先级比其他线程的优先级更高,导致优先级较低的线程一直得不到资源,这就会引发 “线程饥饿” 问题。
==》同步就是在访问临界资源的环境很安全的情况下(一般是互斥、原子性的),让访问资源具有一定的顺序性!
四、原子性的概念
原子性指的是 一件事要么不做,要么就做完;一旦做了就不会被打断。
比如 ticket--,这是一个很常规的自减操作,实际上这么短短的一句,实际有三步,但是这个操作并不是原子性的,具体三步骤如下:
第一步,CPU会先把 tickets 的值加载CPU的寄存器上;
第二步,CPU判断 tickets>0 或者 tickets--;
第三步,将修改以后的 tickets 值或者判断结果返回给内存。
现在我们就可以说,为什么自减操作不是原子性的了。一个线程在执行完第一步以后,由于时间片到了,此时不会继续执行第二步,此时自减这个操作开始做了,但是没做完。
临界资源与临界区、互斥与同步、原子性概念介绍相关推荐
- 临界资源的同步与互斥,区分临界资源与临界区,二义性分析
描述 互斥:同一时间,当只保证互斥,则可以保证临界资源访问不会造成临界资源数据的二义性,但是有可能占有临界资源的进程一直在占有,导致后面进程访问等待时间比较长 同步:保证对临界资源访问的合理性 1. ...
- 简要描述临界资源、临界区及互斥同步机制的原则
简要描述临界资源.临界区及互斥同步机制的原则 答: ①临界资源:指每次只允许一个进程访问的资源,分为硬件.软件临界资源. ②临界区:每个进程中访问临界资源的那段程序,进程对临界区的访问必然相反,每次仅 ...
- 操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)
文章目录 进程的同步基本概念 进程同步的主要任务 进程间的制约关系 临界资源 临界区 同步机制应遵循的规则 信号量机制 整型信号量 记录型信号量 ❤❤❤ AND型信号量 信号量的应用 实现进程互斥 实 ...
- 如何避免操作系统中多线程资源竞争的互斥与同步?
作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...
- Linux---线程互斥和同步
线程互斥和同步 1. 线程互斥 1.1 互斥量的接口函数 1.2 互斥量实现原理探究 2.线程安全和可重入 2.1 概念 3. 死锁 4. 线程同步 4.1 条件变量函数 4.2 为什么pthread ...
- 『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步
「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(二),今天这篇是 Linux多线程详解(三),内容大致是线程互斥与线程同步,讲解下面开始! 「归属专栏」Linux系统编程 ...
- 临界资源和临界区的区别
临界资源和临界区的区别 1.临界资源是一种系统资源,需要不同进程互斥访问,而临界区则是每个进程中访问临界资源的一段代码,是属于对应进程的,临界区前后需要设置进入区和退出区以进行检查和恢复.临界区和临界 ...
- [OS复习]进程互斥与同步2
互斥与同步的解决策略 当前,利用软件方法.硬件方法.信号量方法.管程方法.消息传递方法都可以有效地解决进程间的互斥与同步,其中信号量的方法更具有优势(目前已经通用). 1. 软件方法: 软件方法是指由 ...
- [OS复习]进程互斥与同步1
进程互斥与同步 1.引言:多道程序设计存在的问题? 采用多道程序设计技术的操作系统,允许多个进程同时驻留内存并发执行.思考: A.如何协调多个进程对系统资源,如内存空间.外部设备等的竞争和共享? B. ...
最新文章
- Android美工坊:Selector选择器的使用
- JVM中的垃圾收集器
- 一键获取解锁码_Windows 骚操作:轻轻一按手机指纹解锁电脑!
- 解决VMware虚拟机安装的ubuntu显示屏幕小的问题
- Extract Subclass(提炼子类)
- 海天食品的java开发工作如何_再三个月就秋招了,我想找一份java开发工作,现在应该怎么准备一下?...
- 深度学习(四十六)Adversarial Autoencoders学习笔记
- Laravel 打造一个完整的项目
- 【ShoppingWebCrawler】-C#开发的基于Webkit内核开源爬虫蜘蛛引擎
- beeline-导出csv
- Linux —— 文件系统(特殊文件)、tree
- download.js实现下载的基本用法
- Excel 中VBA脚本的简单应用
- 关于我玩单片机学习路线(个人总结)
- 百色职称计算机,百色报考职称高级
- Unity 之游戏特效
- linux下root权限管理账号
- 维斯易联网络打印机配置教程
- Chrome 去广告插件'Adblock Plus' ,以及插件安装失败方法
- 烂笔头笔记:favicon配置不是所有浏览器都兼容