[原创]DOS下多线程的实现(Demo程序)
*/ --------------------------------------------------------------------------------------*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: RockCarry
*/ 时间: 2007-7-7 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
在 DOS 下如何实现多线程,这程序将会告诉你怎么做。
本程序在 Turbo C 2.0 下调试通过,采用了最简单的时间片轮转法,实现了多线程的系统,程序尽量采用了最简洁的技术来实现多任务的系统,主要使用到了C标准库中的setjmp和longjmp两个函数,程序绝大部分都是采用C语言书写,但是仍然不可避免的采用了三句内嵌汇编,来进行线程堆栈的切换。
我可以向你保证,这绝对是一个可靠的多线程实现方式,但是需要指出的是,由于DOS下的系统调用,都是不可重入的,所以尽管我的多线程实现已经很可靠了,但是当你在多个线程中同时调用了DOS的系统调用,仍然会出现问题。
整个系统,是使用时钟中断处理程序,来完成任务的调度,程序的代码很简单,但是却很难被看懂。毕竟,涉及到任务调度的一些原理,没有一定的基础,和理解能力是不行的。
我个人一直都在思考多任务的实现原理这方面的问题,最近终于想通了。这个东西不复杂,但是确实很难理解。要花很多时间去思考和领悟。网上和教科书上,所给出的东西讲得都太过简单,根本不具备指导性的价值,并且也没有给出具体的实现方法和具体的代码。
在这里,我给出一个,我自己实现的多线程系统,供大家参考。代码很简单,没有实现复杂的任务调度,仅仅是一个时间片轮转的调度算法,但是足以说明问题。有机会,可以进一步完善,更复杂的调度,线程之间的同步等等。
其实我也有看过ucos的代码,当时也希望认真阅读,不过到最后发现自己真的看不懂(不知道是他的代码太烂还是我的理解能力太差)。后来索性自己去思考,今天总算成功了。
今天先把代码给出来,以后有时间,再写一篇文档详细讲讲这个。
下载地址:http://www.freewebs.com/chenkai/download/thread.rar
RockCarry
2007-7-7