嵌入式技术william hill官网
直播中

杨万富

7年用户 1556经验值
擅长:526774
私信 关注
[问答]

代码进入临界区时还可以抢占临界区资源吗

void rt_enter_critical(void)
{
register rt_base_t level;
/ disable interrupt */
level = rt_hw_interrupt_disable();
/

the maximal number of nest is RT_UINT16_MAX, which is big
enough and does not check here
/
rt_scheduler_lock_nest ++;
/ enable interrupt */
rt_hw_interrupt_enable(level);
}
#endif /RT_USING_SMP/
RTM_EXPORT(rt_enter_critical);

看了代码, 发现进入临界区的时候, 中断disable然后又enable, 所以, 进入临界区, 只是把所有线程挂起, 但是中断还是可以抢占临界区资源?

回帖(2)

李超

2022-11-25 10:36:32
如果不想被中断抢占,就用关中断的方式
举报

刘静

2022-11-25 10:36:38
临界区,是多任务之间的概念。这个相比关中断操作,要求可以降低,比如耗用时间较长的操作,或者必须一次性完成的工作等等。
任务和中断之间抢占资源还是得关中断。
如果上述两种情况同时存在了,那就想办法优化程序吧。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分