資料介紹
熟悉WIN32編程的人一定知道,WIN32的進程管理方式與Linux上有著很大區(qū)別,在Unix里,只有進程的概念,但在WIN32里卻還有一個“線程”的概念,那么Linux和WIN32在這里究竟有著什么區(qū)別呢?
WIN32里的進程/線程是繼承自O(shè)S/2的。在WIN32里,“進程”是指一個程序,而“線程”是一個“進程”里的一個執(zhí)行“線索”。從核心上講, WIN32的多進程與Linux并無多大的區(qū)別,在WIN32里的線程才相當于Linux的進程,是一個實際正在執(zhí)行的代碼。但是,WIN32里同一個進程里各個線程之間是共享數(shù)據(jù)段的。這才是與Linux的進程最大的不同。
下面這段程序顯示了WIN32下一個進程如何啟動一個線程。
int g;
DWORD WINAPI ChildProcess( LPVOID lpParameter ){
int i;
for ( i = 1; i 《1000; i ++) {
g ++;
printf( “This is Child Thread: %dn”, g );
}
ExitThread( 0 );
};
void main()
{
int threadID;
int i;
g = 0;
CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );
for ( i = 1; i 《1000; i ++) {
g ++;
printf( “This is Parent Thread: %dn”, g );
}
}
在WIN32下,使用CreateThread函數(shù)創(chuàng)建線程,與Linux下創(chuàng)建進程不同,WIN32線程不是從創(chuàng)建處開始運行的,而是由 CreateThread指定一個函數(shù),線程就從那個函數(shù)處開始運行。此程序同前面的UNIX程序一樣,由兩個線程各打印1000條信息。 threadID是子線程的線程號,另外,全局變量g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,WIN32的進程/線程要比Linux復(fù)雜,在Linux要實現(xiàn)類似WIN32的線程并不難,只要fork以后,讓子進程調(diào)用ThreadProc函數(shù),并且為全局變量開設(shè)共享數(shù)據(jù)區(qū)就行了,但在WIN32下就無法實現(xiàn)類似fork的功能了。所以現(xiàn)在WIN32下的C語言編譯器所提供的庫函數(shù)雖然已經(jīng)能兼容大多數(shù)Linux/UNIX的庫函數(shù),但卻仍無法實現(xiàn)fork。
對于多任務(wù)系統(tǒng),共享數(shù)據(jù)區(qū)是必要的,但也是一個容易引起混亂的問題,在WIN32下,一個程序員很容易忘記線程之間的數(shù)據(jù)是共享的這一情況,一個線程修改過一個變量后,另一個線程卻又修改了它,結(jié)果引起程序出問題。但在Linux下,由于變量本來并不共享,而由程序員來顯式地指定要共享的數(shù)據(jù),使程序變得更清晰與安全。
至于WIN32的“進程”概念,其含義則是“應(yīng)用程序”,也就是相當于UNIX下的exec了。
?
WIN32里的進程/線程是繼承自O(shè)S/2的。在WIN32里,“進程”是指一個程序,而“線程”是一個“進程”里的一個執(zhí)行“線索”。從核心上講, WIN32的多進程與Linux并無多大的區(qū)別,在WIN32里的線程才相當于Linux的進程,是一個實際正在執(zhí)行的代碼。但是,WIN32里同一個進程里各個線程之間是共享數(shù)據(jù)段的。這才是與Linux的進程最大的不同。
下面這段程序顯示了WIN32下一個進程如何啟動一個線程。
int g;
DWORD WINAPI ChildProcess( LPVOID lpParameter ){
int i;
for ( i = 1; i 《1000; i ++) {
g ++;
printf( “This is Child Thread: %dn”, g );
}
ExitThread( 0 );
};
void main()
{
int threadID;
int i;
g = 0;
CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );
for ( i = 1; i 《1000; i ++) {
g ++;
printf( “This is Parent Thread: %dn”, g );
}
}
在WIN32下,使用CreateThread函數(shù)創(chuàng)建線程,與Linux下創(chuàng)建進程不同,WIN32線程不是從創(chuàng)建處開始運行的,而是由 CreateThread指定一個函數(shù),線程就從那個函數(shù)處開始運行。此程序同前面的UNIX程序一樣,由兩個線程各打印1000條信息。 threadID是子線程的線程號,另外,全局變量g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,WIN32的進程/線程要比Linux復(fù)雜,在Linux要實現(xiàn)類似WIN32的線程并不難,只要fork以后,讓子進程調(diào)用ThreadProc函數(shù),并且為全局變量開設(shè)共享數(shù)據(jù)區(qū)就行了,但在WIN32下就無法實現(xiàn)類似fork的功能了。所以現(xiàn)在WIN32下的C語言編譯器所提供的庫函數(shù)雖然已經(jīng)能兼容大多數(shù)Linux/UNIX的庫函數(shù),但卻仍無法實現(xiàn)fork。
對于多任務(wù)系統(tǒng),共享數(shù)據(jù)區(qū)是必要的,但也是一個容易引起混亂的問題,在WIN32下,一個程序員很容易忘記線程之間的數(shù)據(jù)是共享的這一情況,一個線程修改過一個變量后,另一個線程卻又修改了它,結(jié)果引起程序出問題。但在Linux下,由于變量本來并不共享,而由程序員來顯式地指定要共享的數(shù)據(jù),使程序變得更清晰與安全。
至于WIN32的“進程”概念,其含義則是“應(yīng)用程序”,也就是相當于UNIX下的exec了。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- windows與macos發(fā)展與區(qū)別精品
- 級聯(lián)與STACK與IRF與集群間的相互區(qū)別
- 基于Windows 操作系統(tǒng)內(nèi)核驅(qū)動的多核CPU 線程管理 0次下載
- linux多線程編程技術(shù) 5次下載
- 多線程編程之Linux線程編程 3次下載
- windows linux 子系統(tǒng)分析 0次下載
- Windows多線程編程 0次下載
- c線程間通信 3次下載
- linux多線程編程開發(fā) 55次下載
- linux多線程編程課件 0次下載
- 利用流式Socket編程實現(xiàn)Windows與Linux的通信
- LINUX系統(tǒng)下多線程與多進程性能分析
- QNX消息傳遞及其在線程間通信的應(yīng)用
- Windows線程、窗口與消息內(nèi)在機制研究
- Windows CE下多線程串口通信
- linux和windows的區(qū)別 linux系統(tǒng)一般用來干嘛 2.8k次閱讀
- 線程是什么的基本單位 進程與線程的本質(zhì)區(qū)別 1.9k次閱讀
- 程序中進程和線程的區(qū)別 1.5k次閱讀
- 如何在Linux掛載Windows共享目錄 5.3k次閱讀
- Linux與Windows文件換行符的區(qū)別 2.2k次閱讀
- 處理器6核12線程和8核16線程區(qū)別大嗎 6.4w次閱讀
- 基于Windows NT多線程實現(xiàn)智能蓄電池遠程監(jiān)控系統(tǒng)的設(shè)計 2.4k次閱讀
- Windows與Linux之間相互傳輸文件的方法 5.6k次閱讀
- 虛擬機:Linux查看線程信息的步驟 4k次閱讀
- 虛擬機:linux 進程的最大線程個數(shù) 3.2k次閱讀
- windows和Linux程序員到底有沒有區(qū)別? 1.1w次閱讀
- Windows和Linux的區(qū)別以及Linux系統(tǒng)的目錄結(jié)構(gòu) 9.6k次閱讀
- 多線程服務(wù)器編程模型:如何正確使用mutex 和condition variable 7.9k次閱讀
- 線程的實現(xiàn)方式,四線程和八線程的區(qū)別介紹 1.3w次閱讀
- 多線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點分析 8.3w次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊
- 0.74 MB | 1次下載 | 免費
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產(chǎn)品手冊
- 0.43 MB | 1次下載 | 免費
- 8SDFM 激光測距模塊模組手冊
- 0.54 MB | 1次下載 | 免費
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創(chuàng)新應(yīng)用
- 3.11 MB | 43次下載 | 免費
- 3RV1126B系列開發(fā)板產(chǎn)品資料
- 4.19 MB | 18次下載 | 免費
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場景
- 3.05 MB | 12次下載 | 免費
- 6【開源】60余套STM32單片機、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項目案例及入門學(xué)習(xí)資源包
- 10.55 MB | 8次下載 | 免費
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論