先说下结论:rt_sem_create是计数型信号量,你一直release,其value就一直增加。这个和freertos有区别的。
参照:
rt_err_t rt_sem_release(rt_sem_t sem)
{
register rt_base_t temp;
register rt_bool_t need_schedule;
... ...
if (!rt_list_isempty(&sem->parent.suspend_thread))
{
/* resume the suspended thread */
rt_ipc_list_resume(&(sem->parent.suspend_thread));
need_schedule = RT_TRUE;
}
else
{
if(sem->value < RT_SEM_VALUE_MAX)
{
sem->value ++; /* increase value */
}
... ...
}
二值信号量属于计数信号量的一种,用的时候不用区分的,只是说你在应用层的逻辑代码上人为控制其信号量释放的最大值为1即可,主要就是用在线程同步的场景下。
另外类似的线程同步的机制,还有 mutex 和rt_completion。
先说下结论:rt_sem_create是计数型信号量,你一直release,其value就一直增加。这个和freertos有区别的。
参照:
rt_err_t rt_sem_release(rt_sem_t sem)
{
register rt_base_t temp;
register rt_bool_t need_schedule;
... ...
if (!rt_list_isempty(&sem->parent.suspend_thread))
{
/* resume the suspended thread */
rt_ipc_list_resume(&(sem->parent.suspend_thread));
need_schedule = RT_TRUE;
}
else
{
if(sem->value < RT_SEM_VALUE_MAX)
{
sem->value ++; /* increase value */
}
... ...
}
二值信号量属于计数信号量的一种,用的时候不用区分的,只是说你在应用层的逻辑代码上人为控制其信号量释放的最大值为1即可,主要就是用在线程同步的场景下。
另外类似的线程同步的机制,还有 mutex 和rt_completion。
举报