Linux线程——hou.ppt

Linux线程——hou.ppt

ID:48055553

大小:1.20 MB

页数:47页

时间:2020-01-13

Linux线程——hou.ppt_第1页
Linux线程——hou.ppt_第2页
Linux线程——hou.ppt_第3页
Linux线程——hou.ppt_第4页
Linux线程——hou.ppt_第5页
资源描述:

《Linux线程——hou.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux多线程程序设计主讲人:侯健线程理论基础多线程程序设计线程同步线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux。多线程为什么有了进程,还有引入线程?使用多线程有什么好处?多线程优点使用多线程的理由之一和进程相比,它是一种非常"节俭"

2、的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。运行于一个进程中的多个线程,它们之间使用相同的地址空间,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的30倍左右。优点优点使用多线程的理由之二线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,

3、由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。除了以上所说的优点外,多线程程序作为一种多任务、并发的工作方式,还有以下的优点:1)提高应用程序响应。使用多线程技术,将耗时长的操作(timeconsuming)置于一个新的线程。2)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。3)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。Li

4、nux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。多线程线程理论基础多线程程序设计线程同步创建线程tidp:线程标识符(唯一性)attr:线程属性(NULL)start_rtn:线程要执行的函数arg:start_rtn的参数intpthread_create(pthread_t*tidp,constpthread_attr_t*attr,void*(*start_rtn),void*

5、arg)#include编译因为pthread的库不是Linux系统的库,所以在进行编译的时候要加上-lpthread#gccfilename-lpthread实例分析thread_creat.cthread_int.cthread_string.cthread_share.cthread_creat.cthread_int.cthread_string.cthread_share.c终止线程如果进程中任何一个线程调用exit或_exit,那么整个进程都会终止。线程的正常退出方式有

6、:使用return返回,使用pthread_exit这个函数。线程退出例子:thread_exit.c使用return(void*)8;退出线程使用exit(0);退出线程例子:thread_exit.c使用pthread_exit((void*)8);退出线程例子:thread_exit.c线程等待例子thread_join.c例子thread_join.c去掉pthread_join(pth,NULL);线程标识例子thread_id.c清除线程终止有两种情况:正常和非正常终止。正常终止:线程主动调

7、用pthread_exit或者从线程函数中return都将使线程正常退出,这是可预见的退出方式。非正常终止:线程在其他线程的干预下,或者由于自身运行出错而退出,这种退出方式是不可预见的。不管是哪种情况,都要考虑资源回收的问题清除清除清除线程理论基础多线程程序设计线程同步线程同步进程多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂,通过下面这些技术的使用,可以解决线程之间对资源的竞争。1、互斥锁(互斥量)Mutex2、信号量Semaphore互斥量互斥量互斥锁

8、的操作主要包括以下几个步骤:互斥锁初始化:pthread_mutex_init互斥锁上锁:pthread_mutex_lock互斥锁判断上锁:pthread_mutex_trylock互斥锁解锁:pthread_mutex_unlock消除互斥锁:pthread_mutex_destroy创建创建加锁解锁pthread_mutex_tnumber_mutex;intglobalnumber;voidwrite_globalnumber(){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。