- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工程科技]Linux下的多线程编程
Linux下的多线程编程 : 作者: 姚继锋 (2001-08-11 09:05:00) 1 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 使用多线程的理由之一是和进程相比,它是一种非常节俭的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种昂贵的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。 1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 下面我们先来尝试编写一个简单的多线程程序。2 简单的多线程编程 Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有关文档说明。下面我们展示一个最简单的多线程程序example1.c。
/* example.c*/#include stdio.h#include pthread.hvoid thread(void){int i;for(i=0;i3;i++)printf(This is a pthread.\n);}
int main(void){pthread_t id;int i,ret;ret=pthread_create(id,NULL,(void *) thread,NULL);if(ret!=0){printf (Create pthread error!\n);exit (1);}for(i=0;i3;i++)printf(This is the main process.\n);pthread_join(id,NULL);return (0);}
我们编译此程序:gcc example1.c -lpthread -o example1运行example1,我们得到如下结果:This is the main process.This is a pthread.This is the main process.This is the main process.This is a pthread.This is a pthread.This is a pthread.This is the main process.This is a pthread.This is the main process.This is a pthread.This is the main process. 前后两次结果不一样,这是两个线程争夺CPU资源的结果。上面的示例中,我们使用到了两个函数, pthread_create和pthread_join,并声明了一个pthread_t型的变量。pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedef unsigned long int pthread_t; 它是一个线程的标识符。函数pthread_create用来创建一个线程,它的原型为:extern int pthread_c
您可能关注的文档
- [工程科技]2012中国书业营销创新论坛合作方案.pdf
- [工程科技]2012年同济大学硕士研究生专业目录及初复试科目-914.pdf
- [工程科技]2012时尚美鞋.ppt
- [工程科技]25型轨道检测车制动系统培训教材.ppt
- [工程科技]3 human resource planning.ppt
- [工程科技]2、20100507 巴威公司电站湿法脱硫改造和高硫煤烟气脱硫经验Experience of WFGD upgrading retrofit.pdf
- [工程科技]35—220千伏变电站通用运行规程试行.ppt
- [工程科技]2011成都综合体市场物业调研专项报告.ppt
- [工程科技]4a33a7b0102ab.ppt
- [工程科技]44张超清晰北美风格别墅效果图集.pdf
- [工程科技]ME Manual-SMT-CAM350.doc
- [工程科技]PPAP培训教材PPT.ppt
- [工程科技]nbt-05b-店面零售技巧.ppt
- [工程科技]QC 新七大手法.ppt
- [工程科技]Project Title Low-Cost Inflatable-Support Heliostats to Enable Cost-Effective Large-Scale S.pdf
- [工程科技]QC七大手法曾1.ppt
- [工程科技]Representing Time Situation Calculus- branching_ constructed from hypothetical actions.pdf
- [工程科技]QC七大工具温习.ppt
- [工程科技]Some mathematical and algorithmic challenges in.pdf
- [工程科技]SPC 讲座_ QC七大手法_品质管制.pdf
原创力文档


文档评论(0)