|
在WIN32下,使用CreateThread函數(shù)創(chuàng)建線程,與Linux下創(chuàng)建進程不同,WIN32線程不是從創(chuàng)建處開始運行的,而是由 CreateThread指定一個函數(shù),線程就從那個函數(shù)處開始運行。此程序同前面的UNIX程序一樣,由兩個線程各打印1000條信息。 threadID是子線程的線程號,另外,全局變量g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,WIN32的進程/線程要比Linux復雜,在Linux要實現(xiàn)類似WIN32的線程并不難,只要fork以后,讓子進程調(diào)用ThreadProc函數(shù),并且為全局變量開設共享數(shù)據(jù)區(qū)就行了,但在WIN32下就無法實現(xiàn)類似fork的功能了。所以現(xiàn)在WIN32下的C語言編譯器所提供的庫函數(shù)雖然已經(jīng)能兼容大多數(shù)Linux/UNIX的庫函數(shù),但卻仍無法實現(xiàn)fork。
對于多任務系統(tǒng),共享數(shù)據(jù)區(qū)是必要的,但也是一個容易引起混亂的問題,在WIN32下,一個程序員很容易忘記線程之間的數(shù)據(jù)是共享的這一情況,一個線程修改過一個變量后,另一個線程卻又修改了它,結(jié)果引起程序出問題。但在Linux下,由于變量本來并不共享,而由程序員來顯式地指定要共享的數(shù)據(jù),使程序變得更清晰與安全。
至于WIN32的"進程"概念,其含義則是"應用程序",也就是相當于UNIX下的exec了。
上一篇:Linux 22端口的修改方法
下一篇:Linux 記錄會話過程的命令