对比:Linux和Windows系统线程间的区别
发布:smiling 来源: PHP粉丝网 添加日期:2014-03-08 14:17:08 浏览: 评论:0
熟悉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: %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函数创建线程,与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了.
Tags: Linux Windows 系统线程
相关文章
- ·举例分析Linux动态库和静态库(2013-11-11)
- ·Linux开发工具和Windows开发工具对比(2013-11-11)
- ·用C++语言做Linux开发工具的一些心得(2013-11-11)
- ·用C++语言做Linux开发工具之粘合剂Makefile(2013-11-11)
- ·用C++语言做Linux开发工具之编译器和调试器选择要素(2013-11-11)
- ·用C++语言做Linux开发工具之编辑器选择要素(2013-11-11)
- ·Linux编程工具C编译器和C编程工具GDB执行步骤(2013-11-11)
- ·Linux编程工具C编译器和C编程工具介绍(1)(2013-11-11)
- ·Linux系统下完成Windows的开发环境替换(2013-11-14)
- ·Linux 开发工具推荐(2013-11-14)
- ·Linux 内存监控内存泄露和回收内存的方法(2013-11-14)
- ·Linux命令行开发实战(1)(2013-11-14)
- ·Linux系统的网络服务器配置详细解析(2013-11-23)
- ·使用SCons轻松建造自己的程序(2014-02-28)
- ·基础使用:编写Linux 桌面脚本(2014-02-28)
- ·详解Unix和Linux操作系统中Cron的用法(2014-02-28)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)