互斥信号量,也成为互斥量,是一种特殊的二值信号量。也就是说,在创建时互斥量有且只有一个,一般它会被用于临界资源的保护。
何为临界资源?通俗点说,就是有且只有一个的资源,一旦它被某个任务占据,其他任务就需要等待这个资源被释放后才能使用,而这又可以称作互斥访问。
互斥量正适合于这样的场合。由于互斥量仅有一个,那么对于那些想要使用某个临界资源的任务来说,只有最高优先级的会被分配到互斥量,此时其他任务由于没有互斥量,所以只能进入阻塞状态,等待该任务释放资源。
那么有人要问了,既然都是一个,为什么不直接用二值信号量来保护临界资源呢?

前面就说了,互斥量是一种特殊的二值信号量,这个特殊之处,就是互斥量脱颖而出的关键所在------它具有优先级继承机制。
但是谈论优先级继承之前,还需要了解一个概念,叫做**优先级翻转。**这名字一听就知道不是什么好东西,而事实也确实如此。很多情况下,有的资源被设置为仅有一份,而此时若一个低优先级任务正在使用该资源,那么不好意思,即使你优先级再高的任务也得在后面给我乖乖排队,只有低优先级任务释放资源后,高优先级任务才能使用。
更糟糕的是,若在高优先级任务阻塞期间,有一个中优先级任务就绪,而这个任务还不需要用到这个资源,那么不好意思,这个低优先级任务要被打断,将CPU使用权交给中优先级任务。等中优先级任务执行完后,低优先级任务继续执行,直到资源释放给高优先级任务,此时高优先级任务等待时间将会更长。

而我们知道,优先级这东西在一开始就已经定好,越重要越紧急的任务往往优先级就会越高,往往也会优先执行。那么此时一个不那么重要的任务打断了本该执行的高优先级任务,使得阻塞时间过长,这对系统会是一个灾难。
而优先级继承机制将这个翻转的危害降到了最低(并非完全解决)。它的机制就是将占据某种资源的低优先级任务的优先级暂时抬高,提高到等待这个资源的高优先级任务的优先级,这样即使中途有中优先级任务就绪也无法抢占CPU,而当这个任务执行完释放资源后,优先级又会恢复到一开始的级别,此时高优先级任务就可以使用了。这种机制极大缩短了高优先级任务的阻塞时间。
经过上述历程可以看出,互斥量十分适合应用于多任务环境下对于临界资源的保护,而多任务也是操作系统的灵魂。