条件变量和信号量

这问题问得非常深入,条件变量(Condition Variable)和信号量(Semaphore)在同步中经常用,但它们使用方式、适用场景、底层实现都有明显区别。咱们来一波系统对比+图解思维整理👇


✅ 一、定义上的区别

条件变量 cond信号量 sem
🔑 用途等待某个条件满足控制资源数量,同步访问
⏱ 等待方式配合互斥锁使用(等待条件变化)计数机制(P/V 操作)
🧠 场景等待“某事发生”控制进入临界区或等待资源

✅ 五、类比总结(通俗理解)

条件变量信号量
像是等快递:快递没来(条件不满足),你就坐那儿等,等来了再干事像是有 N 把椅子,你想坐必须有空位(资源),没位就等,有位就坐
本身没“状态”,只负责唤醒本身有“计数器”状态

✅ 六、选用建议

使用场景选择
有条件依赖,如等待 buffer 满/空✅ 条件变量
控制并发线程数,资源池(比如最多3个访问者)✅ 信号量
简单的生产者消费者模型二者皆可,但条件变量逻辑更清晰
想要精细控制资源信号量更合适,具备资源记账能力

✅ 总结一句话:

条件变量是事件通知机制,配合锁等待“条件成立”;
信号量是资源计数机制,用于控制对共享资源的访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值