第14章 多线程编程.ppt_第1页
第14章 多线程编程.ppt_第2页
第14章 多线程编程.ppt_第3页
第14章 多线程编程.ppt_第4页
第14章 多线程编程.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第14章 多线程编程,线程的基本概念 线程的基本操作 线程的同步,14.1 线程的基本概念,线程运行于进程空间之中,它是进程内部的一个执行单元。同一个进程的多个线程共享该进程所拥有的全部资源,而线程本身基本上不拥有系统资源,只占用一些在运行过程中必不可少的资源,包括程序计数器、寄存器和栈等。,14.1.1 多线程的意义,多线程的意义主要在于一个程序之中可以有多个执行单元同时执行,是一种多任务的、并发的工作方式,主要表现在以下几个方面。 1提高应用程序的响应速度 2提高多CPU系统的效率,14.1.2 线程与进程的比较,线程与进程已经在很多操作系统类教材中进行过详细的比较,笔者在此不再赘述,只说

2、明相对于进程,线程所具有的两个主要优点。 1线程的开销小,切换快,是一种节俭的多任务操作方式 2线程之间的通信机制更加高效,14.1.3 多线程编程标准与线程库,目前多线程编程标准主要有三种:WIN32、OS/2和POSIX。他们拥有不同的接口,其中前两种都是专用的,只能应用于他们各自的系统平台上,POSIX标准(Portable Operating System Interface of Unix,可移植操作系统接口)最初是为了提高Unix环境下应用程序的可移植性而提出的,现在它已经不局限于Unix系统,其它许多操作系统,如DEC OpenVMS和Microsoft Windows NT,都

3、支持POSIX标准,当然也包括Linux系统。,14.1.4 Linux的线程机制,从内核的角度来说,Linux系统并没有线程这个概念,内核也没有准备特别的调度算法或是定义特别的数据结构来表征线程,而是把所有的线程都当作进程来实现。每一个线程都拥有惟一隶属于它的task_struct,在内核中它看起来就是一个普通的进程,只是该进程和其他一些进程共享某一些资源,例如地址空间等。,14.2 线程的基本操作,上一节中对线程的基本概念进行了详细的阐述,从这一节开始我们将正式步入Linux系统下的多线程编程。首先需要了解是线程的状态与操作,如图所示。,14.2.1 线程的创建,extern int pt

4、hread_create (pthread_t *_restrict _newthread, _const pthread_attr_t *_restrict _attr, void *(*_start_routine) (void *), void *_restrict _arg);,14.2.2 线程的合并,合并两个线程所使用的函数为pthread_join,它的作用是使一个线程等待另一个线程结束,将他们合并在一起。在此过程中,pthread_join函数会阻塞调用它的线程直到指定的线程终止,它类似于前面介绍过的进程用来等待子进程的wait函数。 int pthread_join (pth

5、read_t _th, void *_thread_return);,14.2.3 线程的终止,单个线程可以通过以下几种方式来终止: 1线程自身调用pthread_exit函数 2其他线程调用pthread_cancel函数,14.2.4 线程的属性,前面介绍的线程创建和线程取消操作中,都涉及到线程的属性,这包括取消状态与取消类型,这一小节中我们将对的另外两个比较重要的属性及其操作函数进行介绍。 线程属性的数据结构为pthread_attr_t,它是一个联合体,定义在头文件/usr/include/bits/pthreadtypes之中。 int pthread_attr_init (pthr

6、ead_attr_t *_attr) _THROW _nonnull (1); 1线程的分离状态 int pthread_attr_setdetachstate (pthread_attr_t *_attr, int _detachstate) 2线程的优先级,14.2.4 线程的属性,线程的优先级使用函数pthread_attr_getschedparam和pthread_attr_setschedparam进行存放,这两个函数的定义也是在/usr/include/pthread.h之中。一般情况下,我们总是先读取优先级,对取得的值进行修改,然后再存放回去。,14.3 线程的同步,互斥量 条

7、件变量 信号量,14.3.1 互斥量,互斥量的数据类型为pthread_mutex_t int pthread_mutex_init (pthread_mutex_t *_mutex, _const pthread_mutexattr_t *_mutexattr) int pthread_mutex_destroy (pthread_mutex_t *_mutex) int pthread_mutex_lock (pthread_mutex_t *_mutex) int pthread_mutex_unlock (pthread_mutex_t *_mutex),14.3.2 条件变量,条件变

8、量的数据类型为pthread_cond_t int pthread_cond_init (pthread_cond_t *_restrict _cond, _const pthread_condattr_t *_restrict_cond_attr) int pthread_cond_destroy (pthread_cond_t *_cond) int pthread_cond_wait (pthread_cond_t *_restrict _cond, pthread_mutex_t *_restrict _mutex) int pthread_cond_timedwait (pthrea

9、d_cond_t *_restrict _cond, pthread_mutex_t *_restrict _mutex, _const struct timespec *_restrict_abstime),14.3.2 条件变量,int pthread_cond_signal (pthread_cond_t *_cond) int pthread_cond_broadcast (pthread_cond_t *_cond),14.3.3 信号量,信号量本质上是一个非负的整数计数器,它被用来控制对共享资源的访问。信号量的数据类型为sem_t,在声明后必须进行初始化,不再需要时应注销以释放系统资源,它的初始化和注销函数分别为sem_init和sem_destroy, int sem_post (sem_t *_sem) int sem_wait (sem_t *_sem),14.4 常见面试题,常见面试题1:什么是线程?相比于进程,主要有哪些优点? 常见面试题2:实现线程间同步主要有哪几种方法?,14.5 小结,在这一章中,我们对多线程编程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论