信号量与互斥量的区别

  • 根本区别,互斥量用于线程的互斥,信号量用于线程的同步
  • 互斥量只能为0/1,信号量可以为非负整数
  • 互斥量的一组加锁和解锁只能在同一线程内使用,信号量可以在一个线程内释放,另一个线程内得到。

二元信号量也是信号量,主要保证线程的同步,但因为是二元的,只用0,1两个状态,也只能同时允许一个线程访问。从这一点上看与互斥量类型,但二元信号量与互斥量并不是完全相同,二元信号量终究是信号量,主要保证同步,可以在不同线程申请,释放,互斥量在哪个线程申请就在哪释放。

野火的freertos书中,有这样一段话:

二值信号量和互斥信号量(以下使用互斥量表示互斥信号量)非常相似,但是有一些细 微差别:互斥量有优先级继承机制,二值信号量则没有这个机制。这使得二值信号量更偏 向应用于同步功能(任务与任务间的同步或任务和中断间同步),而互斥量更偏向应用于 临界资源的访问。