1. 信号量

信号量基本上是一个对象,包括计数器、进程等待列表,并支持两种不同的操作,即等待和信号。其类型包括计数信号量和二进制信号量。它只是一个同步工具,可用于处理关键部分问题。它提供了简单的抽象,用于控制对编程环境中公共资源的访问。

2. 条件变量

条件变量只是一个同步原语,它允许线程等待特定条件发生。它包括两个操作,即等待和信号。它只允许线程在线程感兴趣的事情发生时发出信号,并且主要用于人们想知道何时发生某些事情。

信号量和条件变量之间的区别:

信号 条件变量
它不允许线程等待。相反,每个线程都保持运行,最后一个将信号量值设置为零的线程将进入睡眠状态。 它允许线程等待特定条件发生。
一般用于解决流程同步中一些关键环节的问题。 它通常与互斥锁一起使用,以发出从一个线程到另一个线程的状态变化的信号。
它的主要目的是控制多个进程对公共资源的访问,并避免并发系统(如多任务操作系统)中的关键部分问题。 其主要目的是支持唤醒一个或唤醒所有等待线程的操作。
它可以在除监视器以外的任何地方使用。 它只能在显示器中使用。
在这种情况下,wait() 并不总是阻止其调用方。 在这种情况下,wait() 通常总是阻止其调用方。
它们是粘性的,因为它们有内存,即使没有人调用sem_wait()sem_post() 也会增加信号量。 它们是非粘性的,因为如果没有人等待signal(),则不会保存signal()
它只是一个计数器 + 互斥锁 + 等待队列。 它只是一个等待队列。
它可以用作条件变量,因此更轻量级和灵活。 它不能用作信号量,因此不灵活。
在这种情况下,不能使用广播解锁在同一时刻解锁所有等待线程。 在这种情况下,可以使用广播解锁在同一时刻解锁所有等待线程。
即使没有人在队列中等待,信号也不会丢失。 如果没有人在队列中等待,信号就会丢失。

信号量和条件变量的区别

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:信号量和条件变量的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-semaphore-and-condition-variable.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。