- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux下的c语言多线程编程
Linux 下的C 语言多线程编程
【IT168 技术文档】
引言
线程(thread)技术早在60 年代就被提出,但真正应用多线程到操作系
统中去,是在80 年代中期,solaris 是这方面的佼佼者。传统的Unix 也支持线
程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意
味着多进程。现在,多
为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些
好处?什么的系统应该选用多线程?我们首先必须回答这些问题。
使用多线程的理由之一是和进程相比,它是一种非常节俭的多任务操
作方式。我们知道,在Linux 系统下,启动一个新的进程必须分配给它独立的地
址空 间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种
昂贵的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用
相同的地址 空间,共享大部分数据,启动一个线程所花费的空间远远小于启动
一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切
换所需要的时间。
使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它
们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式
不仅费时,而 且很不方便。线程则不然,由于同一进程下的线程之间共享数据
空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。
当然,数据的共享也 带来其他一些问题,有的变量不能同时被两个线程所修改,
有的子程序中声明为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;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
您可能关注的文档
- (药学高职高专教材)—_药物制剂技术.pdf
- @地产智库 城市综合体顶级设计单位典型项目介绍.pdf
- _广东省市政工程综合定额编制说明及计算规则(2010年版).pdf
- _我和labview(pdf版)――一个ni工程师十年的编程经验.pdf
- 《编程狂人》创刊号.pdf
- 《城市消防规划规范》gb51080-2015.pdf
- 《ruby元编程_第2版》50页抢鲜试读.pdf
- 《三维设计》2014届高考数学一轮复习教学案(基础知识+高频考点+解题训练)数列的综合应用(含解析).pdf
- 【名师名校典型题】2014高考数学二轮复习名师知识点总结:数列求和及数列的综合应用.pdf
- 【商业综合体设计】新乡天空之城商业一体化设计.pdf
文档评论(0)