Linux和Windows区别分析之线程问题

熟悉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 <1000; i ++) {g ++;printf( "This is Child Thread: %d/n", 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: %d/n", g );}}

在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了。

(0)

相关推荐

  • linux的简介 linux与windows服务器系统的区别

    通过什么是服务器?一文我们了解到,服务器系统主要有linux与windows系统,对于windows系统大家可能都熟悉些,虽然windows服务器系统,如windows 2008、windows200 ...

  • Linux与windows服务器系统的区别

    Linux操作系统主要包括UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和Internet 网络。windows操作系统包括windows2003、windows2008、X ...

  • linux与windows的区别

    提起Linux和Windows很多人都不知道Linux和Windows是什么,Linux和Windows它们的区别有哪些?这里就跟大家简单说说. 操作方法 01 很多人在使用某种产品的时候,往往会在意 ...

  • Linux和windows中的换行符差异问题

    Linux和windows中的换行符差异问题 LINUX的换行符在Windows记事本打开不换行或出现黑点是由于Linux和windows中的换行符差异问题造成的。 首先来看回车符号和换行符号产生背景 ...

  • Linux与Windows的比较

    Linux确实是个好东西,你只需要一个键盘,一个显示器,一根网线,接入网络,便能做几乎所有的事情。 Linux相比windows的优点,从最本质来讲,其实就是开放源代码,衍生出很多优点,随便列几条: ...

  • Cwrsync如何使用可以实现Linux与windows下的文件同步详解

    小编在7月16号的时候向大家介绍了cwrsync是如何安装配置的,确实cwrsync是一个非常强大智能的软件,下面我们将为大家介绍如何使用cwrsync软件实现Linux与windows系统下的文件同 ...

  • 安装完samba如何从linux访问WINDOWS共享文件夹

    安装完samba如何从linux访问WINDOWS共享文件夹?很多像我一样的新手刚装完samba后,确不知道如何从linux系统访问windows系统的共享文件夹.其实要从linux访问windows ...

  • Linux和Windows双系统Grub丢失恢复

    当我们每次要重装WIN的时候,MBR都会被重写,这样原来的GRUB或LILO就会不见了,或者由于某些原因使得原来的GRUB不见了,这个时候只要重装GRUB就行了。 GRUB的重装方法有很多,这种方法不 ...

  • 用rsync从Linux到Windows远程备份

    rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的 ...