登陆论坛
|
论坛注册
|
加入收藏
|
设为首页
|
RSS
首页
Linux频道
软件下载
开发语言
技术论坛
嵌入式频道
|
数据库开发
|
WEB开发
|
软件开发
|
嵌入应用
|
内核研究
|
SHELL
|
输入您的搜索字词
提交搜索表单
您当前的位置:
首页
>
Linux频道
>
Linux开发区
>
软件开发
linux 和windows 线程间的区别
时间:2007-11-08 17:51:08 来源:
Linux联盟收集整理
作者:
熟悉WIN32编程的人一定知道,WIN32的进程管理方式与Linux上有着很大区别,在UNIX里,只有进程的概念,但在WIN32里却还有一个"线程"的概念,那么Linux和WIN32在这里究竟有着什么区别呢?
eCDLinux联盟
WIN32里的进程/线程是继承自OS/2的。在WIN32里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲, WIN32的多进程与Linux并无多大的区别,在WIN32里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,WIN32里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。
eCDLinux联盟
下面这段程序显示了WIN32下一个进程如何启动一个线程。
eCDLinux联盟
eCDLinux联盟
int g;
eCDLinux联盟
DWORD WINAPI ChildProcess( LPVOID lpParameter ){
eCDLinux联盟
int i;
eCDLinux联盟
for ( i = 1; i <1000; i ++) {
eCDLinux联盟
g ++;
eCDLinux联盟
printf( "This is Child Thread: %d\n", g );
eCDLinux联盟
}
eCDLinux联盟
ExitThread( 0 );
eCDLinux联盟
};
eCDLinux联盟
eCDLinux联盟
void main()
eCDLinux联盟
{
eCDLinux联盟
int threadID;
eCDLinux联盟
int i;
eCDLinux联盟
g = 0;
eCDLinux联盟
CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );
eCDLinux联盟
for ( i = 1; i <1000; i ++) {
eCDLinux联盟
g ++;
eCDLinux联盟
printf( "This is Parent Thread: %d\n", g );
eCDLinux联盟
}
eCDLinux联盟
}
eCDLinux联盟
eCDLinux联盟
在WIN32下,使用CreateThread函数创建线程,与Linux下创建进程不同,WIN32线程不是从创建处开始运行的,而是由 CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。 threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,WIN32的进程/线程要比Linux复杂,在Linux要实现类似WIN32的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在WIN32下就无法实现类似fork的功能了。所以现在WIN32下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。
eCDLinux联盟
对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,在WIN32下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。
eCDLinux联盟
至于WIN32的"进程"概念,其含义则是"应用程序",也就是相当于UNIX下的exec了。
来顶一下
返回首页
发表评论
共有
条评论
用户名:
密码:
验证码:
匿名发表
相关文章
COM/DCOM的区别与联系
RedHat Linux AS 和ES的区别
在DELPHI中用线程排序
如何使用Java编写多线程程序
用Visual Basic创建多线程应用程
JAVA和C++区别
delphi线程插入
自由软件和开源软件的区别
su和sudo的区别与使用
Linux操作系统中内存buffer和cac
栏目更新
栏目热门
站内搜索:
Linux频道
下载频道
图库
商品
嵌入式频道
高级搜索
网站首页
|
关于我们
|
服务条款
|
广告服务
|
联系我们
|
网站大全
|
免责声明
|
返回顶部
Copyright © 2007-2008 xxlinux.com, All rights reserved.
Powered by linux联盟
京ICP备05012402号