20_信号量

信号量

信号量&互斥量: 创建、获取、释放、删除

信号量用于同步,任务间或者任务和中断间同步;

互斥量用于互锁,用于保护同时只能有一个任务访问的资源,为资源上一把锁。

二值信号量:同步

计数信号量:资源使用统计

互斥量:互斥信号量其实就是一个拥有优先级继承的二值信号量递归互

斥:互斥中嵌套互斥

优先级反转,由于高优先级任务在等低优先级任务释放信号量的过程中,低优先级被中优先级任务抢夺CPU,最终导致中优先级任务比高优先级任务先运行,也就是优先级翻转而互斥信号量就可以将这个影响降到最低,当高优先级任务发现需要信号量被低级信号量占用需要等待时,就将低优先级任务变成和自己同级优先级,就不至于在等待的过程中被中优先级抢夺CPU。

osSemaphore 信息量

image-20230917182342554

add后默认添加

image-20230917183421678

image-20230917183437848

if(osSemaphoreWait(myBinarySem01Handle, osWaitForever) == osOK)
{
	printf("get Binary\n");
}


osSemaphoreRelease(myBinarySem01Handle);

osMutex 互斥量

image-20230917184012473

image-20230917184041624

if(osSemaphoreRelease(myCountingSem01Handle) == osOK)
{
	int count = osSemaphoreGetCount(myCountingSem01Handle);
	printf("release Counting %d\n", count);
}


if(osSemaphoreWait(myCountingSem01Handle, osWaitForever) == osOK)
{
			
}

osMutex 递归

image-20230917204101602

if(osMutexWait(myMutex01Handle, osWaitForever) == osOK)
{
	printf("get Mutex\n");
	osMutexRelease(myMutex01Handle);
}


osMutexRelease(myMutex01Handle);	
posted @ 2023-09-19 12:06  爱吃冰激凌的黄某某  阅读(19)  评论(0编辑  收藏  举报