多線程概述
進(jìn)程和線程都是操作系統(tǒng)的概念。進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例,每個進(jìn)程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進(jìn)程在運(yùn)行過程中創(chuàng)建的資源隨著進(jìn)程的終止而被銷毀,所使用的系統(tǒng)資源在進(jìn)程終止時被釋放或關(guān)閉。
線程是進(jìn)程內(nèi)部的一個執(zhí)行單元。系統(tǒng)創(chuàng)建好進(jìn)程后,實(shí)際上就啟動執(zhí)行了該進(jìn)程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main 或WinMain函數(shù),將程序的啟動點(diǎn)提供給Windows 系統(tǒng)。主執(zhí)行線程終止了,進(jìn)程也就隨之終止。
每一個進(jìn)程至少有一個主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。
用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程,多個線程并發(fā)地運(yùn)行于同一個進(jìn)程中。一個進(jìn)程中的所有線程都在該進(jìn)程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術(shù)的應(yīng)用也較為廣泛。
多線程可以實(shí)現(xiàn)并行處理,避免了某項(xiàng)任務(wù)長時間占用 CPU 時間。要說明的一點(diǎn)是,目前大多數(shù)的計(jì)算機(jī)都是單處理器(CPU)的,為了運(yùn)行所有這些線程,操作系統(tǒng)為每個獨(dú)立線程安排一些 CPU 時間,操作系統(tǒng)以輪換方式向線程提供時間片,這就給人一種假象,好象這些線程都在同時運(yùn)行。由此可見,如果兩個非;钴S的線程為了搶奪對 CPU 的控制權(quán),在線程切換時會消耗很多的 CPU 資源,反而會降低系統(tǒng)的性能。這一點(diǎn)在多線程編程時應(yīng)該注意。
Win32 SDK函數(shù)支持進(jìn)行多線程的程序設(shè)計(jì),并提供了操作系統(tǒng)原理中的各種同步、互斥和臨界區(qū)等操作。Visual C++ 6.0 中,使用MFC類庫也實(shí)現(xiàn)了多線程的程序設(shè)計(jì),使得多線程編程更加方便。
由淺入深的給出了多個VC多線程例子,非常適合初學(xué)者。