概念理解:
信号量就是一个量,设为N。当N=0的时候,代表本任务(资源)不可用,处于等待状态,当调用函数OSSemPost(Sem_Event);发送一次信号量,此时N=1,本任务可执行,执行完毕后N=N-1。等下新的信号量到达。有点类似标志位。
新建信号量:
OS_EVENT * Sem_Event;
OS_SEM_DATA result[];
u8 err;
打下划线为用到的变量,事先声明。
1、Sem_Event=OSSemCreate(4); //创建信号量并初始化为4.
2、OSSemPend(Sem_Event,0,&err); //请求信号量,若信号量有效(cnt>0),那么任务继续运行,否则进入等待状态
实际上,函数就是判断N是非为0,为0任务等待。>0继续运行,并且N-1。
3、OSSemPost(Sem_Event); //发送一次信号量,即N+1;
4、 OSSemDel(Sem_Event,OS_DEL_ALWAYS,&err);
//删除信号量Sem_Event之后,信号量讲无效,所有任务将不受限信号量,注意下划线的变量
5、OSSemQuery(Sem_Event,result); //查询信号量Sem_Event的状态
count=result->OSCnt; //获取信号量Sem_Event的计数值=count
本文深入探讨了信号量的概念、使用方法及其实现过程,包括新建、请求、发送信号量的操作,以及删除和查询信号量状态。通过具体示例阐述了信号量如何在并发编程中实现资源管理和任务调度。
1098

被折叠的 条评论
为什么被折叠?



