首页 > 系统相关 >linux中条件变量和信号量的区别!

linux中条件变量和信号量的区别!

时间:2023-03-03 14:31:58浏览次数:41  
标签:linux 变量 条件 信号量 线程 Linux 唤醒

  在Linux系统中,条件变量和信号量是非常专业的词汇,也是我们每个人都会接触到的知识,那么Linux中条件变量和信号量有什么区别?以下是具体内容介绍。

  条件变量

  条件变量使在多线程程序中用来实现“等待--->唤醒”逻辑常用的方法,是进程间同步的一种机制。条件变量用来阻塞一个线程,直到条件满足被触发为止,通常情况下条件变量和互斥量同时使用。

  一般条件变量有两个状态:

  ①一个/多个线程为等待"条件变量的条件成立"而挂起;

  ②另一个线程在"条件变量条件成立时"通知其他线程。

  信号量

  信号量是一种特殊的变量,访问具有原子性。

  只允许对它进行两个操作:

  ①等待信号量:当信号量值为0时,程序等待;当信号量值大于0时,信号量减1,程序继续运行。

  ②发送信号量:将信号量值加1。

  说明:Linux提供了一组信号量API,声明在头文件sys/sem.h中。

  Linux条件变量和信号量的区别:

  ①使用条件变量可以一次唤醒所有等待者,而这个信号量没有的功能,感觉是最大区别。

  ②信号量始终有一个值,而条件变量是没有的,没有地方记录唤醒过多少次,也没有地方记录唤醒线程过多少次。从实现上来说一个信号量可以欧尼顾mutex+counter+condition variable实现的。因为信号量有一个状态,如果想精准的同步,那么信号量可能会有特殊的地方。信号量可以解决条件变量中存在的唤醒丢失问题。

  ③信号量的意图在于进程间同步,互斥锁和条件变量的意图在于线程间同步,但是信号量也可用于线程间,互斥锁和条件变量也可用于进程间。应当根据实际的情况进行决定。信号量最有用的场景是用以指明可用资源的数量。

标签:linux,变量,条件,信号量,线程,Linux,唤醒
From: https://blog.51cto.com/u_14661964/6098784

相关文章

  • Linux 磁盘扩容
    原文链接:https://blog.csdn.net/zzq100zzq/article/details/125178843一、查看系统磁盘1、使用df-hl,查看系统的磁盘使用情况二、linux磁盘扩容当LVM分区空间不足的时......
  • Linux运用一些常用命令,优秀的PHPer都需掌握
    作为一名优秀的phper,Linux是必备的一项技能,工作3-5年的基本能明白我讲的道理!今天搜集整理了一些Linux服务器运维常用命令,希望对大家有帮助:1.删除0字节文件 find -type......
  • 教你在Red Hat Linux 9下架设FTP服务器
    现如今越来越多的人选择了开源的Linux操作系统,其不逊于Windows的性能和平易近人的价格是人们选择它的最好理由,而RedHatLinux9是Linux操作系统中使用最广的一种。RedHat......
  • python中的__name__变量
    一、__name__1.1这个__name__拿来做什么的?__name__是一个特别的变量,当我们与模块交互时使用,可以让我们区分哪些模块(常指:包和库)导入或者不导入。1.2 这个__name__......
  • Linux离线安装mysql5.7
    下载mysql:https://dev.mysql.com/downloads/mysql/5.7.html#downloads  切换到root用户解压mysql压缩包tar-zxvfmysql-5.7.24-linux-glibc2.12-x86_64.tar.......
  • #创作者激励#【FFH】openharmony南向研究(5)-linux驱动框架-PWM
    【本文正在参加2023年第一期优质创作者激励计划】本文简要介绍对比基于linux内核开发PWM平台驱动的方案,在平台驱动开发完成后可以合入HDF框架作为Openharmony底层驱动方案,......
  • 【Avalonia】【跨平台】关于Prism项目模块化在Linux下路径问题
    背景当我们在用Avalonia开发项目的时候会涉及到路径的问题,在Linux下面路径的写法和Window路径的写法有区别问题描述用Avalonia开发项目发现我们之前的路径写法在Linux下......
  • kali linux安装配置
    目录   虚拟机VMware安装配置   安装kalilinuxOS   安装vmtools   配置kali实验环境       1.更改默认root密码       2.设置中文(看个......
  • windows cmd使用linux命令
    一、首先,下载Git:https://git-scm.com/downloads(官网地址) 二、一路默认,安装到C盘 三、找到Git文件下的mingw64和usr文件下的bin四、复制这两个路径,添加全局的系统......
  • Linux内核面试题汇总
    [暂无答案]1.硬件中断号和Linux内核的IRQ号它们是如何映射的?2.当发生硬件中断之后,ARM64处理器架构做哪些工作?3.为什么说中断上下文不能执行睡眠操作?4.一个硬件中断后,Linux......