目录

一、临界资源与临界区

二、互斥的概念

三、同步的概念

四、原子性的概念


一、临界资源与临界区

临界资源:凡是能被多个执行流同时访问的资源就是临界资源!(比如多个线程访问同一个全局变量,这里的全局变量就是临界资源)

临界区:我们写的代码中,并非所有的代码都会访问临界资源,其中访问临界资源的代码区域,就叫做临界区

二、互斥的概念

互斥 的目的是保护临界区,其实本质上就是保护临界资源。那么什么是互斥呢??

线程逻辑冲突是因为同一份临界资源被多个线程访问,那么互斥就是任意时刻,只能有一个执行流访问临界区或者访问临界资源。就好比食堂大妈不能同时给多个同学打饭,在给一个同学打饭的时候,其他同学就无法打饭。

三、同步的概念

同步的目的是在互斥的基础上保证公平性和顺序性。如果因为某个线程优先级比其他线程的优先级更高,导致优先级较低的线程一直得不到资源,这就会引发 “线程饥饿” 问题。

==》同步就是在访问临界资源的环境很安全的情况下(一般是互斥、原子性的),让访问资源具有一定的顺序性!

四、原子性的概念

原子性指的是 一件事要么不做,要么就做完;一旦做了就不会被打断。

比如 ticket--,这是一个很常规的自减操作,实际上这么短短的一句,实际有三步,但是这个操作并不是原子性的,具体三步骤如下:

第一步,CPU会先把 tickets 的值加载CPU的寄存器上;

第二步,CPU判断 tickets>0 或者 tickets--;

第三步,将修改以后的 tickets 值或者判断结果返回给内存。

现在我们就可以说,为什么自减操作不是原子性的了。一个线程在执行完第一步以后,由于时间片到了,此时不会继续执行第二步,此时自减这个操作开始做了,但是没做完。

临界资源与临界区、互斥与同步、原子性概念介绍相关推荐

  1. 临界资源的同步与互斥,区分临界资源与临界区,二义性分析

    描述 互斥:同一时间,当只保证互斥,则可以保证临界资源访问不会造成临界资源数据的二义性,但是有可能占有临界资源的进程一直在占有,导致后面进程访问等待时间比较长 同步:保证对临界资源访问的合理性 1. ...

  2. 简要描述临界资源、临界区及互斥同步机制的原则

    简要描述临界资源.临界区及互斥同步机制的原则 答: ①临界资源:指每次只允许一个进程访问的资源,分为硬件.软件临界资源. ②临界区:每个进程中访问临界资源的那段程序,进程对临界区的访问必然相反,每次仅 ...

  3. 操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)

    文章目录 进程的同步基本概念 进程同步的主要任务 进程间的制约关系 临界资源 临界区 同步机制应遵循的规则 信号量机制 整型信号量 记录型信号量 ❤❤❤ AND型信号量 信号量的应用 实现进程互斥 实 ...

  4. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

  5. Linux---线程互斥和同步

    线程互斥和同步 1. 线程互斥 1.1 互斥量的接口函数 1.2 互斥量实现原理探究 2.线程安全和可重入 2.1 概念 3. 死锁 4. 线程同步 4.1 条件变量函数 4.2 为什么pthread ...

  6. 『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步

    「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(二),今天这篇是 Linux多线程详解(三),内容大致是线程互斥与线程同步,讲解下面开始! 「归属专栏」Linux系统编程 ...

  7. 临界资源和临界区的区别

    临界资源和临界区的区别 1.临界资源是一种系统资源,需要不同进程互斥访问,而临界区则是每个进程中访问临界资源的一段代码,是属于对应进程的,临界区前后需要设置进入区和退出区以进行检查和恢复.临界区和临界 ...

  8. [OS复习]进程互斥与同步2

    互斥与同步的解决策略 当前,利用软件方法.硬件方法.信号量方法.管程方法.消息传递方法都可以有效地解决进程间的互斥与同步,其中信号量的方法更具有优势(目前已经通用). 1. 软件方法: 软件方法是指由 ...

  9. [OS复习]进程互斥与同步1

    进程互斥与同步 1.引言:多道程序设计存在的问题? 采用多道程序设计技术的操作系统,允许多个进程同时驻留内存并发执行.思考: A.如何协调多个进程对系统资源,如内存空间.外部设备等的竞争和共享? B. ...

最新文章

  1. Android美工坊:Selector选择器的使用
  2. JVM中的垃圾收集器
  3. 一键获取解锁码_Windows 骚操作:轻轻一按手机指纹解锁电脑!
  4. 解决VMware虚拟机安装的ubuntu显示屏幕小的问题
  5. Extract Subclass(提炼子类)
  6. 海天食品的java开发工作如何_再三个月就秋招了,我想找一份java开发工作,现在应该怎么准备一下?...
  7. 深度学习(四十六)Adversarial Autoencoders学习笔记
  8. Laravel 打造一个完整的项目
  9. 【ShoppingWebCrawler】-C#开发的基于Webkit内核开源爬虫蜘蛛引擎
  10. beeline-导出csv
  11. Linux —— 文件系统(特殊文件)、tree
  12. download.js实现下载的基本用法
  13. Excel 中VBA脚本的简单应用
  14. 关于我玩单片机学习路线(个人总结)
  15. 百色职称计算机,百色报考职称高级
  16. Unity 之游戏特效
  17. linux下root权限管理账号
  18. 维斯易联网络打印机配置教程
  19. Chrome 去广告插件'Adblock Plus' ,以及插件安装失败方法
  20. 烂笔头笔记:favicon配置不是所有浏览器都兼容

热门文章

  1. EOS开发基础之二:使用cleos命令行客户端操作EOS(钱包wallet基础操作)
  2. 064_《Delphi7程序设计与开发技术大全》
  3. parseInt的原理
  4. idea中项目前端网页图标不显示的原因
  5. 内核编程常用API函数
  6. 计算机主板上主要有哪些芯片,主板芯片组有哪些功能_如何查看主板芯片组
  7. unity接微信登录,eclipse打jar包,快速高效
  8. (结构体+指针)定义“车”结构体,实现改变车颜色,车牌操作
  9. docker部署gateone
  10. 丢人丢大了!深圳一公司违反开源协议还耍无赖,科技博主上门教做人!