20_信号量
信号量
信号量&互斥量: 创建、获取、释放、删除
信号量用于同步,任务间或者任务和中断间同步;
互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁。
二值信号量:同步
计数信号量:资源使用统计
互斥量:互斥信号量其实就是一个拥有优先级继承的二值信号量递归互
斥:互斥中嵌套互斥
优先级反转,由于高优先级任务在等低优先级任务释放信号量的过程中,低优先级被中优先级任务抢夺CPU,最终导致中优先级任务比高优先级任务先运行,也就是优先级翻转而互斥信号量就可以将这个影响降到最低,当高优先级任务发现需要信号量被低级信号量占用需要等待时,就将低优先级任务变成和自己同级优先级,就不至于在等待的过程中被中优先级抢夺CPU。
osSemaphore 信息量
add后默认添加
if(osSemaphoreWait(myBinarySem01Handle, osWaitForever) == osOK)
{
printf("get Binary\n");
}
osSemaphoreRelease(myBinarySem01Handle);
osMutex 互斥量
if(osSemaphoreRelease(myCountingSem01Handle) == osOK)
{
int count = osSemaphoreGetCount(myCountingSem01Handle);
printf("release Counting %d\n", count);
}
if(osSemaphoreWait(myCountingSem01Handle, osWaitForever) == osOK)
{
}
osMutex 递归
if(osMutexWait(myMutex01Handle, osWaitForever) == osOK)
{
printf("get Mutex\n");
osMutexRelease(myMutex01Handle);
}
osMutexRelease(myMutex01Handle);