WinCE 5 kernel thread priority真的很厉害

来源:互联网 发布:2016双十一淘宝交易额 编辑:程序博客网 时间:2024/05/01 00:26

下面是一个Windows Mobile6上的一个线程的实现体。

我要提醒一下

1.       WinCE kernelmulti-task环境

2.       这个线程的实现看起来没什么特别

结论

这样一个thread直接会导致这个mobile系统无法正常使用,power button失效,keypad无法使用。

再次引导你误判

WinCE kernelmulti-task环境!一个thread不可能导致整个系统完蛋!对呀!你看仔细了么?看仔细了!这个线程没干什么呀?!

分析

虽然WinCE kernelmulti-task环境,但是task也是要被调度才能拿到执行权的。一个thread被剥夺执行权只有两个时机。

1.       操作系统 timer interrupt或者其他的中断

2.       这个threadsystem call放弃执行权。包括WaitforSingleObject,Sleep这样的等待API

那么回头看上面的代码,

1.       thread先设置自己的优先级在一个非常高的级别152(power managerthread也只有249)

2.       这个threadfor循环只是在大量消耗系统资源,几乎没给系统喘息的机会,因为他根本不去休息。

综上

这样的高优先级,疯狂占用CPU资源的thread在整个系统中危害是极大的。在这个thread陷入到它的for循环中后,这个系统表现出来的是停止响应,基本上是死机(但实际是并没有死)。

我这里不停的for只是一个模拟,类似的代码有多种表现形式,你自己可以想象。

我的目的不是让你只在这里看热闹,而是从这个例子我们可以知道thread虽然运行在multi-task环境,似乎不会影响其他人,可是事实是他确实会影响,而且非常影响。

结论

因此,如果你决定让自己的thread以很高的优先级运行,那么你一定要对自己的代码负责任,尽量不要让自己影响到别人,这是每个合格的程序员都应该去思考的东西。

 

原创粉丝点击