Unix程序设计多线程编程_第1页
Unix程序设计多线程编程_第2页
Unix程序设计多线程编程_第3页
Unix程序设计多线程编程_第4页
Unix程序设计多线程编程_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、Ch6 Unix Programming multi-thread programming本章重点本章重点 l线程的概念l线程函数的介绍以及应用l线程互斥锁的应用Contents1.线程概念2.常用API函数3.线程同步4.综合应用6.1 线程概念线程概念l进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存、堆内存、文件描述符等l线程独有的:线程ID、寄存器值、栈、信号屏蔽字、errno值、线程私有数据l典型的UNIX进程,可以看成是只有一个线程的进程6.1 线程概念线程概念l同进程一样,每个线程也有一个线程IDl进程ID在整个系统中是唯一的,但线程ID不同,线程

2、ID只在它所属的进程环境中有效l线程ID的类型是pthread_t,在Linux中的定义:l在/usr/include/bits/pthreadtypes.h中ltypedef unsigned long int pthread_t;Contents1.线程概念2.常用API函数3.线程同步4.综合应用6.2 常用常用API函数函数6.2.1 pthread_create函数l头文件:#includel功能:创建一个线程l函数原型int pthread_create(pthread_t *thread, pthread_attr_t *attr,void *(*start_routine)(v

3、oid *), void *arg);6.2 常用常用API函数函数l参数lthread:线程标识符lattr:线程属性设置,通常可设为NULL,采用默认线程属性lstart_routine:线程函数的起始地址larg:传递给start_routine的参数l返回值l成功:0;失败:-16.2 常用常用API函数函数6.2.2 pthread_join函数l功能:该函数用于等待某个线程终止l函数原型#includeint pthread_join(pthread_t th, void *thread_return);l参数lth:等待线程的标识符lthread_return:用户定义的指针,用

4、来存储被等待线程的返回值l返回值:成功返回0,否则返回错误编号 调用该函数的线程将一直阻塞,直到指定的线程调用pthread_exit、从启动例程中返回、被取消6.2.3 pthread_cancel函数l功能:线程调用该函数可以取消同一进程中的其他线程,即让线程终止l函数原型#includeint pthread_cancel(pthread_t tid);l参数与返回值ltid:需要取消的线程IDl成功返回0, 出错返回错误编号lpthread_cancel并不等待线程终止,它仅仅是提出请求6.2 常用常用API函数函数l例6-1线程创建 创建两个线程,线程1每秒打印全局变量的值并累计,线

5、程2每2秒打印全局变量的值,两个线程打印5次后退出。主线程等待两个线程退出后显示两个线程已经退出。Contents1.线程概念2.常用API函数3.线程同步4.综合应用6.3 线程同步线程同步l6.3.1线程同步的概念l为什么需要同步l对同一个存储单元,至少存在两个执行体,其一读该单元,另一写该单元,则需要同步,避免不一致性l在处理器架构中,对内存单元的修改,可能需要多个总线周期,因此读操作和写操作有可能交织在一起6.3 线程同步线程同步l6.3.1线程同步的概念l假设读操作需要一个总线周期l写操作需要两个总线周期l线程B和线程A冲突6.3 线程同步线程同步l6.3.1 线程同步的概念l使用锁

6、,以保证共享存储一次只能被一个线程访问l说明获取、释放锁的过程6.3 线程同步线程同步l6.3.2 线程互斥锁l可以通过使用pthread的互斥接口保护数据,确保同一时间里只有一个线程访问数据l互斥锁mutex,本质上就是一把锁l在访问共享资源前,对互斥锁进行加锁l在访问完成后释放互斥锁上的锁l对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放6.3 线程同步线程同步6.3.2 线程互斥锁函数线程互斥锁初始化pthread_mutex_init线程互斥锁销毁pthread_mutex_destroy线程互斥锁加锁和解锁pthread_mutex_lock pthre

7、ad_mutex_unlock6.3 线程同步线程同步6.3.3 线程互斥锁初始化l互斥锁在使用前,必须要对互斥锁进行初始化l函数原型#includeint pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutexattr);l参数与返回值lmutex:即互斥锁,类型是pthread_mutex_t注意:mutex必须指向有效的内存区域6.3 线程同步线程同步l6.3.3 线程互斥锁初始化l参数与返回值lattr:设置互斥锁的属性,通常可采用默认属性,即可将attr设为NULL。l成功返回0,出错返回错

8、误码6.3 线程同步线程同步6.3.4 线程互斥锁销毁l互斥锁在使用完毕后,必须要对互斥锁进行销毁,以释放资源l函数原型#includeint pthread_mutex_destroy( pthread_mutex_t *mutex);l参数与返回值lmutex:即互斥锁l成功返回0,出错返回错误码6.3 线程同步线程同步6.3.5 线程互斥锁加锁和解锁l在对共享资源访问之前和访问之后,需要对互斥锁进行加锁和解锁操作l函数原型#includeint pthread_mutex_lock(pthread_mutex_t *mutex);Int pthread_mutex_unlock(pthread_mutex_t *mutex);6.3 线程同步线程同步6.3.6互斥锁的操作顺序l定义一个互斥锁pthread_mutex_tl调用pthread_mutex_init初始化互斥锁l调用pthread_mutex_lock或者pthread_mutex_tryplock对互斥锁进行加锁操作l调用pthread_mutex_unlock对互斥锁解锁l调用pthread_mutex_destroy销毁互斥锁6.3 线程同步线程同步l例 6-2线程互斥锁 创建两个线程,

温馨提示

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

评论

0/150

提交评论