linux与windows差分分析中的线程问题
在Win32进程/线程是操作系统/ 2.in Win32的继承,过程
熟悉win32编程的人必须知道Win32的进程管理和Linux之间有很大的不同。在UNIX中,只有进程的概念,但在Win32中有一个线程的概念。那么Linux和win32在这里有什么不同呢
在Win32进程/线程是操作系统/ 2.in Win32的继承,过程是指一个程序,和线是一个线程在过程的核心观点,Win32多过程不是Linux很不同。Win32中的线程相当于Linux的进程,这是一个实际执行的代码,但是,数据段是在Win32中同一进程中的线程之间共享的,这是与Linux进程最大的区别。
下面的程序显示Win32下一个进程是如何启动线程的。
int g;
DWORD WINAPI子处理(LPVOID lpparameter){
int i;
对于(i = 1;i < 1000;i + +){
++;
printf(这是子线程:%d
}
退出当前线索(0);
};
主()
{
int就;
int i;
g=0;
CreateThread(null,0,子处理,零,0,就);
对于(i = 1;i < 1000;i + +){
++;
printf(这是父线程:%d
}
}
在Win32 CreateThread函数来创建线程,这是linux下的创作过程不同。而从创作现场,Win32线程被分配一个函数CreateThread,和线程开始从功能运行。这个节目,像以前的UNIX程序,打印1000条信息从两threads.threadid是子线程的线程数。此外,全局变量的G是与父线程的子线程共享的,这是从Linux最大的区别,我们可以看到,Win32进程/线程Linux相比更为复杂,在Linux下实现了一个类似Win32线程并不难,只要叉,让孩子过程调用的函数和全局变量之后,开放共享数据区就行了,但在Win32将无法实现叉类似的功能。所以现在的库函数提供的C语言编译器在win32下已与大多数Linux / Unix库函数兼容,但它仍然是无法实现叉。
对于多任务系统来说,共享数据区域是必要的,但在win32中也是一个令人困惑的问题,程序员很容易忘记线程之间的数据是共享的,一个线程修改一个变量,另一个线程改变了它。程序引起的问题。但是在Linux下,因为变量没有共享,程序员显式地指定要共享的数据,从而使程序更加清晰和安全。
对于Win32的进程概念,其含义是应用。