熟悉WIN32编程的人一定知道,WIN32的进程管理方式和Linux上有着很大区别,在UNIX里,只有进程的概念,但在WIN32里却更有一个"线程"的概念,那么Linux和WIN32在这里究竟有着什么区别呢?
WIN32里的进程/线程是继承自OS/2的。在WIN32里,"进程"是指一个程式,而"线程"是个"进程"里的一个执行"线索"。从核心上讲, WIN32的多进程和Linux并无多大的区别,在WIN32里的线程才相当于Linux的进程,是个实际正在执行的代码。但是,WIN32里同一个进程里各个线程之间是共享数据段的。这才是和Linux的进程最大的不同。
下面这段程式显示了WIN32下一个进程如何启动一个线程。
int g;
DWORD WINAPI ChildProcess( LPVOID lpParameter ){
int i;
for ( i = 1; i
在WIN32下,使用CreateThread函数创建线程,和Linux下创建进程不同,WIN32线程不是从创建处开始运行的,而是由 CreateThread指定一个函数,线程就从那个函数处开始运行。此程式同前面的UNIX程式相同,由两个线程各打印1000条信息。 threadID是子线程的线程号,另外,全局变量g是子线程和父线程共享的,这就是和Linux最大的不同之处。大家能够看出,WIN32的进程/线程要比Linux复杂,在Linux要实现类似WIN32的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在WIN32下就无法实现类似fork的功能了。所以现在WIN32下的C语言编译器所提供的库函数虽然已能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。
对于多任务系统,共享数据区是必要的,但也是个容易引起混乱的问题,在WIN32下,一个程式员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了他,结果引起程式出问题。但在Linux下,由于变量本来并不共享,而由程式员来显式地指定要共享的数据,使程式变得更清楚和安全。
至于WIN32的"进程"概念,其含义则是"应用程式",也就是相当于UNIX下的exec了。


本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u/31/showart_503246.html