- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
06Linux多线程.doc
LINUX多线程
LINUX多线程 1
1. Linux多线程概述 1
1.1. 概述 1
1.2. 线程创建的Linux实现 1
2. 线程的创建 2
3. 线程的终止 3
3.1. 线程正常终止 3
3.2. 线程的取消 4
3.3. 线程终止清理函数 5
4. 线程的同步与互斥 7
4.1. 线程的互斥 7
4.2. 线程的同步 10
Linux多线程概述
概述
相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。同多进程一样,多线程程序并不能真正提高程序的运行速度。在实际应用中,多线程通常仅仅是为了方便程序设计,具体的说,通常是用于有阻塞调用的场合,比如io的read,socket的recv等,以提高响应速度。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。从可移植性来讲,多进程的可移植性要好些 。
线程分类
按调度者分为用户级线程和核心级线程
1用户级线程:主要解决上下文切换问题,调度算法由用户决定。缺点是无法发挥多处理器的优势。
2核心级线程:允许不同进程中的线程按照同一相对优先调度方法调度,发挥多处理器的优势。
线程创建的Linux实现
Linux的线程是通过用户级的函数库实现的,内核提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork(),最终都用不同的参数调用do_fork()。do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。当使用fork系统调用时,内核调用do_fork()不使用任何共享属性,进程拥有独立的运行环境,而使用pthread_create()来创建线程时,则最终设置了所有这些属性来调用__clone(),而这些参数又全部传给核内的do_fork(),从而创建的进程拥有共享的运行环境,只有栈是独立的,由__clone()传入。
按通俗的话讲,Linux线程就是轻量级的进程。
线程的创建
函数原型:
#include pthread.h
int pthread_create( pthread_t * thread, pthread_attr_t * attr,
void *(*start_routine)(void *), void * arg);
thread是传出参数,保存新线程的标识;
attr是一个结构体指针,结构中的元素分别指定新线程的运行属性,各成员属性为:
__detachstate表示新线程是否与进程中其他线程脱离同步,如果置位则新线程不能用pthread_join()来同步,且在退出时自行释放所占用的资源。缺省为PTHREAD_CREATE_JOINABLE状态。这个属性也可以在线程创建并运行以后用pthread_detach()来设置,而一旦设置为PTHREAD_CREATE_DETACH状态(不论是创建时设置还是运行时设置)则不能再恢复到PTHREAD_CREATE_JOINABLE状态。
__schedpolicy,表示新线程的调度策略,主要包括SCHED_OTHER(正常、非实时)、SCHED_RR(实时、轮转法)和SCHED_FIFO(实时、先入先出)三种,缺省为SCHED_OTHER,后两种调度策略仅对超级用户有效。运行时可以用过pthread_setschedparam()来改变。
__schedparam,一个sched_param结构,目前仅有一个sched_priority整型变量表示线程的运行优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效,并可以在运行时通过pthread_setschedparam()函数来改变,缺省为0。
__inheritsched,有两种值可供选择:PTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHED,前者表示新线程使用显式指定调度策略和调度参数(即attr中的值),而后者表示继承调用者线程的值。缺省为PTHREAD_EXPLICIT_SCHED。
__scope,表示线程间竞争CPU的范围,也就是说线程优先级的有效范围。POSIX的标准中定义了两个值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示与系统中所有线程一起竞争CPU时间,后者表示仅与同进程中的线程竞争CPU。目前Linux仅实现了PTHRE
您可能关注的文档
- (必威体育精装版精品)经济法学复习之案例分析.doc
- (必威体育精装版精品)经济法律基础形成性考核全部.doc
- (必威体育精装版精品)经济法律汇编.doc
- (必威体育精装版精品)经济法教案.doc
- (必威体育精装版精品)经济法教案成教.doc
- (必威体育精装版精品)经济法期末复习.doc
- (必威体育精装版精品)经济法期末复习_0.doc
- (必威体育精装版精品)经济法案例.doc
- (必威体育精装版精品)经济法案例与答案.doc
- (必威体育精装版精品)经济法案例汇编.doc
- ITSM变更管理流程的培训.pptx
- 2024公司聘用合同(30篇).pdf
- 河北省沧州四县部分学校2024-2025学年高一上学期11月月考地理试题.docx
- 跨国工程投标文件撰写要点.docx
- 2024-2025学年高中地理选修1中图版教学设计合集.docx
- 2024-2025学年高中化学选修4 化学反应原理鲁科版教学设计合集.docx
- 2024-2025学年高中化学选修4 化学反应原理苏教版教学设计合集.docx
- 2021年结直肠癌肝转移转化治疗的研究进展(全文).doc
- 2024-2025学年初中体育与健康七年级全一册人教版(2024)教学设计合集.docx
- 2024-2025学年初中体育与健康八年级全一册华东师大版(2024)教学设计合集.docx
文档评论(0)