Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1681700
  • 博文数量: 2270
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 22829
  • 用 户 组: 普通用户
  • 注册时间: 2020-11-26 14:30
个人简介

更多python、Linux、网络安全学习内容,可移步:www.oldboyedu.com或关注\"老男孩Linux\"公众号

文章分类

全部博文(2270)

文章存档

2024年(115)

2023年(643)

2022年(693)

2021年(734)

2020年(80)

我的朋友

分类: LINUX

2023-03-03 14:29:08

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

  条件变量

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

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

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

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

  信号量

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

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

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

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

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

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

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

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

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

阅读(199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~