多线程编程-API.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:6 大小:66KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

多线程编程-API.doc

多线程编程-API.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

多线程编程-APIAUTHER:JeffreyzhuBLOG:HYPERLINK"http://blog.csdn.net/gueter/"http://blog.csdn.net/gueter/HYPERLINK"http://www.mowker.com"http://www.mowker.comTOC\o"1-3"\h\z\uHYPERLINK\l"_Toc271994108"1、Linux线程概述PAGEREF_Toc271994108\h1HYPERLINK\l"_Toc271994109"2、linux线程APIPAGEREF_Toc271994109\h1HYPERLINK\l"_Toc271994110"2.1线程创建与退出PAGEREF_Toc271994110\h1HYPERLINK\l"_Toc271994111"2.2修改线程属性PAGEREF_Toc271994111\h2HYPERLINK\l"_Toc271994112"3、多线程示例PAGEREF_Toc271994112\h3HYPERLINK\l"_Toc271994113"4、相关文献PAGEREF_Toc271994113\h51、Linux线程概述进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程,线程是在共享进程内存空间中并发执行,它们共享一个进程的资源,避免了进程间通信带来的额外开销,从而有效提高资源效率。线程按照其调度者可分为用户级线程和内核级线程两种。(1)用户级线程主要解决的是上下文切换的问题,其调度算法和调度过程全部有用户决定。(2)内核级线程由内核调度机制实现。现在大多数操作系统都采用用户级线程和内核级线程并存的方法。用户级线程可与内核级线程实现“一对一”,“一对多”的对应关系。2、linux线程API以下线程均为用户级线程。在linux中,一般采用Pthread线程库实现线程的访问与控制,由POSIX提出,具有良好的可移植性。2.1线程创建与退出创建线程使用pthread_create函数。在线程创建以后,就开始运行相关的线程函数。线程退出时使用函数pthread_exit,是线程的主动行为。注意进程退出时使用exit函数,线程中用pthread_exit替代exit。由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。所有需要pthread_join函数来等待线程结束,类似于wait系统调用。(1)创建线程:#include<pthread.h>pthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg)thread:线程标识符attr:线程属性设置start_routine:线程函数起始地址arg:传递给start_routine的参数(2)线程退出:#include<pthread.h>pthread_exit(void*retval)retval:pthread_exit调用者线程的返回值,可由其它函数和pthread_join来检测获取。(3)等待线程退出:#include<pthread.h>pthread_join(pthread_t*th,void**thread_return)th:等待线程的标识符thread_return:用户定义指针,用来存储被等待线程的返回值2.2修改线程属性在thread_creat函数中有设置线程属性参数,这些属性包括绑定属性、分离属性、堆栈地址、堆栈大小、优先级。系统默认属性为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级,下面分别介绍绑定属性和分离属性。1、绑定属性在linux系统中,可实现一个用户级线程与一个内核级线程相对应的“一对一”线程机制。绑定属性是指一个用户级线程固定的分配给一个内核级线程,非绑定属性则是指用户级线程与内核级线程的关系不是始终固定的,而是由系统来控制分配。2、分离属性分离属性是用来决定一个线程以什么样的方式来终止自己。在非分离情况下,当一个线程结束时,它所占用的系统资源并没有完全释放,也没有真正终止。只有当pthread_join()函数返回时,该线程才释放自己占用的资源。而在分离情况下,一个线程结束时会立即释放它所占用的资源。3、属性设置属性设置是由一定函数来完成的,通常调用pthread_att