下面是一个Windows Mobile6上的一个线程的实现体。
1. WinCE kernel是multi-task环境
2. 这个线程的实现看起来没什么特别
这样一个thread直接会导致这个mobile系统无法正常使用,power button失效,keypad无法使用。
WinCE kernel是multi-task环境!一个thread不可能导致整个系统完蛋!对呀!你看仔细了么?看仔细了!这个线程没干什么呀?!
虽然WinCE kernel是multi-task环境,但是task也是要被调度才能拿到执行权的。一个thread被剥夺执行权只有两个时机。
1. 操作系统 timer interrupt或者其他的中断
2. 这个thread做system call放弃执行权。包括WaitforSingleObject,Sleep这样的等待API
那么回头看上面的代码,
1. thread先设置自己的优先级在一个非常高的级别152(连power manager的thread也只有249)
2. 这个thread的for循环只是在大量消耗系统资源,几乎没给系统喘息的机会,因为他根本不去休息。
这样的高优先级,疯狂占用CPU资源的thread在整个系统中危害是极大的。在这个thread陷入到它的for循环中后,这个系统表现出来的是停止响应,基本上是死机(但实际是并没有死)。
我这里不停的for只是一个模拟,类似的代码有多种表现形式,你自己可以想象。
我的目的不是让你只在这里看热闹,而是从这个例子我们可以知道thread虽然运行在multi-task环境,似乎不会影响其他人,可是事实是他确实会影响,而且非常影响。
因此,如果你决定让自己的thread以很高的优先级运行,那么你一定要对自己的代码负责任,尽量不要让自己影响到别人,这是每个合格的程序员都应该去思考的东西。