论坛登陆 注册 文章专区 笑话频道 影视频道 投稿文章 旧版浏览
首页 | 页界资讯 | 网络应用 | 软件应用 | 组网技术 | 网络原理 | 聊天通讯 | 网管知识 | 帮助
笑话 | 操作系统 | 注 册 表 | 编程开发 | 数 据 库 | 媒体动画 | 网页设计 | 图形图象 | 地图
论坛 | 网络安全 | 安全防范 | 服 务 器 | 硬件学堂 | 路由技术 | 搜索研究 | 站长经验 | 投稿
影院 | 教育频道 | 特色专题 | 精文荟萃 | 注 册 码 | 论坛社区 | 网站地图 | 广告服务 | 旧版
设为首页 加入收藏
当前位置:首页>>文章>>操作系统>>Linux>>正文

Linux系统下的多线程编程入门

www.xker.com 作者:pcstudy 来源:blogchina 加入日期:2006-1-17 11:13:48

【问题提问、论坛交流】引言

  线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux

  为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题

  使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间据统计,总的说来桓鼋痰目笤际且桓鱿叱炭?0倍左右,当然,在具体的系统上,这个数据可能会有较大的区别

  使用多线程的理由之二是线程间方便的通信机制对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方

  除了以上所说的优点外,不和进程比较,多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:

  1) 提高应用程序响应这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况

  2) 使多CPU系统更加有效操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上

  3) 改善程序结构一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改

  下面我们先来尝试编写一个简单的多线程程序

  简单的多线程编程

  Linux系统下的多线程遵循POSIX线程接口,称为pthread编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a顺便说一下,Linux下pthread的实现是通过系统调用clone()来实现的clone()是Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有关文档说明下面我们展示一个最简单的多线程程序example1.c

/* example.c*/
#include <stdio.h>
#include <pthread.h>
void thread(void)
{
 int i;
 for(i=0;i<3;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;i<3;i++)
  printf("This is the main process.n");
 pthread_join(id,NULL);
 return (0);
}

  我们编译此程序:

本新闻共9页,当前在第1页  1  2  3  4  5  6  7  8  9  

编辑:xker.com

上一篇:让Linux象Windows一样安装卸载
下一篇:没有了
关闭窗口】【浏览次数:】【发送给好友】【收藏此页
相关文章
推荐文章 最新文章 热门文章
·Linux系统下的多线程编程入门
·武林绝技之笔记本操作系统优化
·Fireworks绘制新春贺卡:娃娃放鞭炮(
·制作一条龙 教你如何将下载的电影刻成
·一分钟攻破ADSL 盗遍宽带密码
·Oracle数据库游标使用大全
·Oracle9i中监视索引的使用
·使用Oracle实现实时通信
·制作MP3播放器TXT图书之三剑客
·什么是IPTV
·全面控制Win XP的安装进度过程
·电子图书制作方法之EXE格式篇
·用VC6.0实现快捷方式中的查找目标功能
·实战网络服务器安全配置技巧
·在Java SE中使用Hibernate框架
·Linux系统下的多线程编程入门
·通过.inf文件让Win XP实现自动维护
·武林绝技之笔记本操作系统优化
·微软出品 农历狗年春节桌面方案下载(
·Fireworks绘制新春贺卡:娃娃放鞭炮(
·Live Messenger新功能:音乐同步播
·用Excel把网页上复制来的文本行列互换
·制作一条龙 教你如何将下载的电影刻成
·Photoshop表现质感:打造精美花瓶
·IT小博士:PC电源知识简介
·一分钟攻破ADSL 盗遍宽带密码
·首届网管员推荐实用品牌调查-获奖名
·Google新服务:任何网站生成移动版
·博客网Alexa排名清零事件全透视
·Oracle数据库游标使用大全
·个人简历表格
·免费代理IP(每日更新)
·QQ密码丢失后能做的事情:快速找回密码
·WinRAR 3.51 注册码
·Norton AntiVirus 2006 注册码(激活
·系统优化 专题
·找回QQ密码的注意事项 
·史上最强QQ个人档案资料欣赏
·最经典的黑客入门教材
·求职简历封皮
·怎样查找对方的IP地址
·FlashFXP 3.3.1 build 1089注册码
·2005最新最全注册码集中营(11月更新)
·应届毕业生求职信
·ACDSee v8.0注册码
评论 本站声明
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
【注】 发表评论必需遵守以下条例:
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
  • 本站大部分为网络转载,如有版权问题,请通知我们,我们立即更正!

设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003-2006 xker.com All rights reserved. 网站合作、广告联系QQ:12231446
小新技术网 冀ICP备05002857号