?? readme.txt
字號:
在 DOS 下如何實現多線程,這程序將會告訴你怎么做
本程序在 Turbo C 2.0 下調試通過,采用了最簡單的時間片輪轉法,實現了多線程的系統,程序盡量采用了最簡潔的技術來實現多任務的系統,主要使用到了C標準庫中的setjmp和longjmp兩個函數,程序絕大部分都是采用C語言書寫,但是仍然不可避免的采用了三句內嵌匯編,來進行線程堆棧的切換。
我可以向你保證,這絕對是一個可靠的多線程實現方式,但是需要指出的是,由于DOS下的系統調用,都是不可重入的,所以盡管我的多線程實現已經很可靠了,但是當你在多個線程中同時調用了DOS的系統調用,仍然會出現問題。
整個系統,是使用時鐘中斷處理程序,來完成任務的調度,程序的代碼很簡單,但是卻很難被看懂。畢竟,涉及到任務調度的一些原理,沒有一定的基礎,和理解能力是不行的。
我個人一直都在思考多任務的實現原理這方面的問題,最近終于想通了。這個東西不復雜,但是確實很難理解。要花很多時間去思考和領悟。網上和教科書上,所給出的東西講得都太過簡單,根本不具備指導性的價值,并且也沒有給出具體的實現方法和具體的代碼。
在這里,我給出一個,我自己實現的多線程系統,供大家參考。代碼很簡單,沒有實現復雜的任務調度,僅僅是一個時間片輪轉的調度算法,但是足以說明問題。有機會,可以進一步完善,更復雜的調度,線程之間的同步等等。
其實我也有看過ucos的代碼,當時也希望認真閱讀,不過到最后發現自己真的看不懂(不知道是他的代碼太爛還是我的理解能力太差)。后來索性自己去思考,今天總算成功了。
今天先把代碼給出來,以后有時間,再寫一篇文檔詳細講講這個。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -