- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[高等教育]Linux多线程
Linux多线程 多线程概念 进程是资源分配的对象,时间片内存等。 线程是使用资源的实体,一个进程中的多个线程共享内存,全局变量, 文件描述符等。 线程有独立的栈和寄存器 线程的优缺点 优点: 上下文切换快 共享数据容易 创建线程速度快 缺点 内存共享会导致互相干扰 一个线程崩溃会导致整个进程崩溃 用户级线程 线程可以在用户层或者内核层提供 在用户层实现线程意味着内核并不知道线程的存在。 用户层线程库会实现线程的创建、删除、调度。 用户层的线程创建比较快 当某个线程要使用内核时,其余线程都会被挂起。 内核级线程 内核直接支持线程 线程的创建、删除和调度都有内核来做。 一个线程等待I/O阻塞时,其余线程可以继续运行。 创建等操作要进出内核,速度会慢些。 目前流行的操作系统都支持内核级线程。 多线程模型 内核线程和用户线程的对应关系 一个内核线程对应n个用户线程(用户级线程) 一个内核线程对应一个用户线程(内核级线程) 用户级线程 内核级线程 多线程中的fork 在linux系统当一个拥有多线程的进程调用fork时,子进程只会有一个线程! 多线程中的信号 在linux系统中信号是用来通知进程特殊事件发生了 多线程中有哪个线程来处理呢? 信号会被递送给恰当的线程,比如SIGILL非法指令。 信号会被递送给进程中任意的线程处理。 在多线程环境我们一般指定一个线程专门处理信号,其余线程全部屏蔽信号处理。 线程池 在程序设计中,并不是来一个任务/请求就创建一个线程,执行完毕线程退出。 程序初始化时创建一个线程池,线程池中有n个线程。 当一个请求来时,从线程池中取一个线程,完成请求后线程再放回线程池。 节省了频繁创建线程和销毁线程的开销。 pthread A POSIX standard (IEEE 1003.1c) API for thread creation and synchronization。 pthread大概有60多个函数,包括线程的创建、终止等。 Linux中实现了pthread线程库 Unix/Widows中也有pthread的实现。 Linux中使用pthead方法为: #include pthread.h gcc main.c –lpthread 注意:必须加lpthread,不像glibc库,gcc不会自动去链接pthread库。 线程创建:pthread_create() pthread_create用来创建一个线程。 成功返回0,失败返回非0。 thread指向内存单元将被设置为新创建的线程ID,attr是要创建线程的属性(NULL为默认属性),start_routine为线程开始执行的函数,arg为start_routine的参数。 线程共享全局变量,在一个线程中改变对另外线程可见。 pthread_create() arg不能是局部变量,否则线程使用该变量时可能已经被修改或者不存在了。 start_routine的参数和返回值都为void *,如果有多个参数,那只能打包成一个结构体了。返回值不能是局部变量!! 主线程退出,则整个进程结束。 线程终止 如果进程中的任意线程调用exit、_exit、_Exit,那么整个进程都会被终止。 线程从启动函数中返回,返回值是线程的退出码。 线程可以被其他线程取消 线程调用pthread_exit退出。 pthread_exit 调用pthread_exit后,线程终止。 参数value_ptr会被后来调用pthread_join函数的线程获得! pthread_join的第一个参数指定某个线程,第二个参数用来接收线程的退出值。 线程ID pthread_self返回调用线程的线程ID。 当比较两个线程是否是同一个线程,需要用pthread_equal. 线程属性 pthread_create的第二个参数就是线程的属性,传入NULL表示使用默认属性。 可以用过pthread API来修改线程的属性。 线程分离属性 当一个线程被创建时,系统给它创建一个线程控制块(有thread id来标识)。如果线程没有设置分离属性,那么需要其它线程通过pthread_join来回收这个线程控制块。如果设置了分离属性,那么线程结束时自动释放创建时分配的资源。 pthread_detach用来设置分离属性,但须注意必须在新创建的线程结束之前!一般来说这个函数是有新建线程进入启动函数后立马调用的,pthread_detach(pthread_self()) 线程属性 pthread_attr_init用默认值初始化线程的属性。 成功返回0,失败返回非0值。 pthread_attr_destroy用来销毁ini
您可能关注的文档
- [高二英语]语言点Book8Unit5_Meeting_your_ancestors_Language_points.ppt
- [高二英语]选修8 Unit2 Cloning Warming Up.ppt
- [高二英语]高中英语 Unit 24 Society—Lesson 1 Consumer Socie 课件 北师大版选修8.ppt
- [高二英语]高中英语 Unit3 Inventors and inventions 第四课时 Using Language学案课件 新人教版 选修8.ppt
- [高二英语]高二英语Book 5 Unit 2知识点语法课件.ppt
- [高二英语]高二英语《 M5 U3 Task》.ppt
- [高二英语]高中英语 第一单元u1 Warming up and Reading课件 新人教版必修5.ppt
- [高二英语]高二英语新课标选修7 Unit1 Living well Language points.ppt
- [高二英语]高二英语选修6外研版课件2-1Introduction.ppt
- [高二英语]高二英语选修7第四单元Sharing__Learning_about_Language1.ppt
- 基于人工智能教育平台的移动应用开发,探讨跨平台兼容性影响因素及优化策略教学研究课题报告.docx
- 高中生物实验:城市热岛效应对城市生态系统服务功能的影响机制教学研究课题报告.docx
- 信息技术行业信息安全法律法规研究及政策建议教学研究课题报告.docx
- 人工智能视角下区域教育评价改革:利益相关者互动与政策支持研究教学研究课题报告.docx
- 6 《垃圾填埋场渗滤液处理与土地资源化利用研究》教学研究课题报告.docx
- 小学音乐与美术教师跨学科协作模式构建:人工智能技术助力教学创新教学研究课题报告.docx
- 《航空航天3D打印技术对航空器装配工艺的创新与效率提升》教学研究课题报告.docx
- 教育扶贫精准化策略研究:人工智能技术在区域教育中的应用与创新教学研究课题报告.docx
- 《区块链技术在电子政务电子档案管理中的数据完整性保障与优化》教学研究课题报告.docx
- 《中医护理情志疗法对癌症患者心理状态和生活质量提升的长期追踪研究》教学研究课题报告.docx
文档评论(0)