低优先级线程无法获得运行机会应该如何处理?
如题,部分代码如下:int rt_application_init(void)
{
rt_thread_t init_thread;
rt_thread_t appThread;
init_thread = rt_thread_create("init",
rt_init_thread_entry, RT_NULL,
2048, 8, 20);
if (init_thread != RT_NULL)
rt_thread_startup(init_thread);
appThread = rt_thread_create("usbsend",
usbsend_thread_entry, RT_NULL,
384,21, 10);
if (appThread != RT_NULL)
rt_thread_startup(appThread);
appThread = rt_thread_create("usbread",
usbread_thread_entry, RT_NULL,
384,21, 10);
if (appThread != RT_NULL)
rt_thread_startup(appThread);
appThread = rt_thread_create("test",
test_thread_entry, RT_NULL,
384,22, 50);
if (appThread != RT_NULL)
rt_thread_startup(appThread);
appThread = rt_thread_create("led",
led_thread_entry, RT_NULL,
256,23, 100);
if (appThread != RT_NULL)
rt_thread_startup(appThread);
return 0;
}
线程"test"和线程"led"完全无法获得运行机会。四个线程都是运行完后就马上rt_thread_yield(); 如果不采用一般的阻塞方式,也就分时间片给它啊,其它的线程delay一下 优先级队列应当有一种防饿死机制,即如果一个低优先级线程在N次循环都没有得到执行的条件下,它的优先级会得到提升。执行完后再降下来。 实时操作系统就是这样,他不允许在高优先级任务时间片不够用的情况下,分一些给低优先级的任务,哪怕一点点
非实时性OS就可以了,比如Windows的任务,低任务优先级只要等的时间足够长,仍可以分配一些时间片,Linux也是如此
工业用途和民用的差别,工业用的讲原则,民用的重视客户体验 你那个打印只是某一刻的状态而已,不能说明某个线程有没有机会运行,要让低优先级任务线程有运行时间,所有的高优先级任务必须要有让出系统时间的相关操作,只要有一个高优先级的任务永远不让出时间,那低优先级的任务就永远无法获得系统时间,这就是实时操作系统的特性 shenzhen_apeng 发表于 2015-1-4 10:38
你那个打印只是某一刻的状态而已,不能说明某个线程有没有机会运行,要让低优先级任务线程有运行时间,所有 ...
不是通过finsh打印确定低优先级线程无法获得运行机会的,而是运行一个低优先级的线程“led”,但是led始终无法化。上述代码中的“test”,“led”始终无法得到执行机会。rt_thread_yield();是让出线程的对吗?
页:
[1]