互斥信号量
对于互斥信号量: 二值,要么为0,要么为1
Pend/Accept: 想取得互斥信号量的控制权
Post: 释放互斥信号量的控制权。只有取得互斥信号量的任务post才有效
优先级翻转问题:
低优先级的任务取得了互斥信号量后,高优先的任务也想取得互斥信号量的控制权。这个时候高优先级的任务得不到互斥信号量,并且还会把低优先级的任务的优先级提升到一个设定的优先级(提升到的优先级在创建互斥信号量的时候已经指定,一般设置的优先级比想取得此互斥信号量的任务中最高的优先级还高)。
低优先级的任务和高优先级的任务同时都想要获取同一个互斥信号量,假如低优先级的任务先得到了这个互斥信号量,然后高优先级的任务就需要等待低优先级的任务释放该信号量才能得到。如果在低优先级释放信号量之前被其他不参与竞争这个互斥信号量的中等优先级任务抢走了CPU,就有可能发生低优先级的任务释放不了这个互斥信号量,使得在等待该信号量的高优先级任务真的等到死了。
所以,为了避免这种事情的发生,在低优先级的任务得到了互斥信号量后,高优先级的任务也想去获取而获取不到时,就会把得到该互斥信号量的低优先级任务的优先级提升到一个预定的比较高的优先级。当低优先级任务释放了互斥信号量后,就会把优先级回复到原来的级别。
如果高优先级的任务先的到了互斥信号量,而这时候低优先级的任务也想去获取,只能死等。
对于互斥信号量: 二值,要么为0,要么为1
Pend/Accept: 想取得互斥信号量的控制权
Post: 释放互斥信号量的控制权。只有取得互斥信号量的任务post才有效
优先级翻转问题:
低优先级的任务取得了互斥信号量后,高优先的任务也想取得互斥信号量的控制权。这个时候高优先级的任务得不到互斥信号量,并且还会把低优先级的任务的优先级提升到一个设定的优先级(提升到的优先级在创建互斥信号量的时候已经指定,一般设置的优先级比想取得此互斥信号量的任务中最高的优先级还高)。
低优先级的任务和高优先级的任务同时都想要获取同一个互斥信号量,假如低优先级的任务先得到了这个互斥信号量,然后高优先级的任务就需要等待低优先级的任务释放该信号量才能得到。如果在低优先级释放信号量之前被其他不参与竞争这个互斥信号量的中等优先级任务抢走了CPU,就有可能发生低优先级的任务释放不了这个互斥信号量,使得在等待该信号量的高优先级任务真的等到死了。
所以,为了避免这种事情的发生,在低优先级的任务得到了互斥信号量后,高优先级的任务也想去获取而获取不到时,就会把得到该互斥信号量的低优先级任务的优先级提升到一个预定的比较高的优先级。当低优先级任务释放了互斥信号量后,就会把优先级回复到原来的级别。
如果高优先级的任务先的到了互斥信号量,而这时候低优先级的任务也想去获取,只能死等。