Skip to content

Latest commit

 

History

History

#使用信号量、条件变量、以及互斥锁

举了两个例子,一个是信号量+互斥锁实现生产者消费者,另一个是使用信号量+互斥锁实现生产者消费者

那么信号量和锁有什么差别吗?

来自gpt 回答 条件变量: 使用场景 1.生产者-消费者模型:消费者等待生产者生产数据 2.多线程调度:一个线程等待其他线程完成任务 3.等待某个特定时间的发生:如等待资源可用或者等某个状态改变

优势: 1.条件变量可以实现复杂的等待条件,允许线程在等待过程中释放锁并挂起,避免忙等待 2.条件变量适用于需要等待特定条件的复杂同步场景

信号量 使用场景: 1.资源计数:控制对有限资源的访问,如线程池、数据库连接池 2.线程间的简单同步:一个线程通知另一个线程某个时间的发生 3.实现互斥:二值信号量可以用来实互斥锁

优势: 1.信号量适用于简单的计数控制场景,可以高效的管理资源访问 2.适用于需要简单通知机制的场景,比如一个线程等待另个线程的信号。

总结: 为什么条件变量适用于复杂场景? 条件变量提供了: 1.复杂的等待条件 条件变量允许线程在等待过程中检查复杂的条件(比如,一个线程可以等待多个条件中的任意一个条件变为真) 在生产者-消费者模型中,消费者线程可以等待生产这线程生产数据后再继续工作 2.避免忙等待 条件变量允许线程在等待期间挂起,并在满足条件时被唤醒。这避免了忙等待 3.广播唤醒 条件变量支持广播唤醒,允许一个线程唤醒等待该条件的所有线程。