欢迎来到天天文库
浏览记录
ID:41032889
大小:206.50 KB
页数:18页
时间:2019-08-14
《Posix线程编程指南(经典)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Posix线程编程指南Posix线程编程指南1一线程创建与取消2线程创建21.线程与进程22.创建线程23.线程创建属性24.创建的Linux实现3线程取消31.消的定义32.线程取消的语义43.取消点44.程序设计方面的考虑45.与线程取消相关的pthread函数4二线程私有数据51.概念及作用52.创建和注销53.访问54.使用范例6三线程同步7互斥锁71.创建和销毁72.互斥锁属性83.锁操作84.其他8条件变量91.创建和注销92.等待和激发93.其他10信号灯111.创建和注销112.点灯和灭灯
2、123.获取灯值124.其他12异步信号12其他同步方式13四线程终止13线程终止方式13线程终止时的清理13线程终止的同步及其返回值15关于pthread_exit()和return15五杂项15获得本线程ID16判断两个线程是否为同一线程16仅执行一次的操作16一线程创建与取消这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix线程库API。本文是第一篇将向您讲述线程的创建与取消。线程创建1.线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的
3、其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。2.创建线程POSIX通过pthread_create()函数创建线程,API定义如下:intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*star
4、t_routine)(void*),void*arg)与fork()调用创建一个进程的方法不同,pthread_create()创建的线程并不具备与主线程(即调用pthread_create()的线程)同样的执行序列,而是使其运行start_routine(arg)函数。thread返回创建的线程ID,而attr是创建线程时设置的线程属性(见下)。pthread_create()的返回值表示线程创建是否成功。尽管arg是void*类型的变量,但它同样可以作为任意类型的参数传给start_routine()
5、函数;同时,start_routine()可以返回一个void*类型的返回值,而这个返回值也可以是其他类型,并由pthread_join()获取。3.线程创建属性pthread_create()中的attr参数是一个结构指针,结构中的元素分别对应着新线程的运行属性,主要包括以下几项:__detachstate,表示新线程是否与进程中其他线程脱离同步,如果置位则新线程不能用pthread_join()来同步,且在退出时自行释放所占用的资源。缺省为PTHREAD_CREATE_JOINABLE状态。这个属性也
6、可以在线程创建并运行以后用pthread_detach()来设置,而一旦设置为PTHREAD_CREATE_DETACH状态(不论是创建时设置还是运行时设置)则不能再恢复到PTHREAD_CREATE_JOINABLE状态。__schedpolicy,表示新线程的调度策略,主要包括SCHED_OTHER(正常、非实时)、SCHED_RR(实时、轮转法)和SCHED_FIFO(实时、先入先出)三种,缺省为SCHED_OTHER,后两种调度策略仅对超级用户有效。运行时可以用过pthread_setschedp
7、aram()来改变。__schedparam,一个structsched_param结构,目前仅有一个sched_priority整型变量表示线程的运行优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效,并可以在运行时通过pthread_setschedparam()函数来改变,缺省为0。__inheritsched,有两种值可供选择:PTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHED,前者表示新线程使用显式指定调度策略和调度参数(
8、即attr中的值),而后者表示继承调用者线程的值。缺省为PTHREAD_EXPLICIT_SCHED。__scope,表示线程间竞争CPU的范围,也就是说线程优先级的有效范围。POSIX的标准中定义了两个值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示与系统中所有线程一起竞争CPU时间,后者表示仅与同进程中的线程竞争CPU。目前LinuxThreads仅实现了PTHREAD_S
此文档下载收益归作者所有