




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
多线程编程-API AUTHER:Jeffrey zhu BLOG: /gueter/ 1、Linux线程概述12、linux线程API12.1 线程创建与退出12.2 修改线程属性23、多线程示例34、相关文献51、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_create(pthread_t *thread, pthread_attr_t *attr,void *(*start_ routine)(void *), void *arg)thread:线程标识符attr:线程属性设置start_routine:线程函数起始地址arg:传递给start_routine的参数(2)线程退出:#include pthread_exit( void *retval )retval:pthread_exit调用者线程的返回值,可由其它函数和pthread_join来检测获取。(3)等待线程退出:#include pthread_join( pthread_t *th,void *thread_return )th:等待线程的标识符thread_return:用户定义指针,用来存储被等待线程的返回值2.2 修改线程属性在thread_creat函数中有设置线程属性参数,这些属性包括绑定属性、分离属性、堆栈地址、堆栈大小、优先级。系统默认属性为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级,下面分别介绍绑定属性和分离属性。1、绑定属性 在linux系统中,可实现一个用户级线程与一个内核级线程相对应的“一对一”线程机制。绑定属性是指一个用户级线程固定的分配给一个内核级线程,非绑定属性则是指用户级线程与内核级线程的关系不是始终固定的,而是由系统来控制分配。2、分离属性 分离属性是用来决定一个线程以什么样的方式来终止自己。在非分离情况下,当一个线程结束时,它所占用的系统资源并没有完全释放,也没有真正终止。只有当pthread_join()函数返回时,该线程才释放自己占用的资源。而在分离情况下,一个线程结束时会立即释放它所占用的资源。3、属性设置属性设置是由一定函数来完成的,通常调用pthread_attr_init函数进行初始化。设置绑定属性的函数为pthread_attr_setscope,设置分离属性的函数是pthread_attr_setdetachstate,设置线程优先级的相关函数pthread_attr_getschdparm(获取线程优先级)和pthread_attr_setschedparam (设置线程优先级)。在设置完成属性后,调用pthread_creat函数创建线程。(1)线程属性初始化:#include int pthread_attr_init (pthread_attr_t *attr) attr:线程属性返回值:成功0,错误-1。(2)设置绑定属性:#include pthread_attr_setscope(pthread_attr_t *attr, init scope)attr:线程属性scope:PTHREAD_SCOPE_SYSTEM(绑定) PTHREAD_SCOPE_PRCESS(非绑定)返回值:成功0,错误-1。(3)设置分离属性:#include pthread_attr_setsetdetachstate(pthread_attr_t*attr, init detachstate)attr:线程属性detachstate :PTHREAD_CREAT_DETACHED(分离) PTHREAD_CREAT_JOINABLE(非分离)返回值:成功0,错误-1。(4)获取线程优先级:#include int pthread_attr_getschedparam (pthread_attr_attr *attr, struct sched_param *param)attr:线程属性param:线程优先级返回值:成功0,错误-1。(5)设置线程优先级:#include int pthread_attr_setschedparam (pthread_attr_attr *attr,struct sched_param *param)attr:线程属性param:线程优先级返回值:成功0,错误-1。3、多线程示例/* * 作者: Jeffrey.zhu * 功能: 多线程API应用示例 * 日期: 2010年6月* 联系方式: 墨客论文网: * CSDN博客:/gueter/ */#include #include #include /* * 作者: Jeffrey.zhu * 功能: 线程1* 联系方式: 墨客论文网: * CSDN博客:/gueter/ */void thread1(void) int i=0;for (i=0; i100000; i+) printf(This is a pthread1.n);if (2 = i) pthread_exit(0); /* * 作者: Jeffrey.zhu * 功能: 线程函数2* 联系方式: 墨客论文网: * CSDN博客:/gueter/ */void thread2(void) int i;while (1) for (i=0; i3; i+) printf(This is a pthread2.n);pthread_exit(0);/* * 作者: Jeffrey.zhu * 功能: 主线程* 联系方式: 墨客论文网: * CSDN博客:/gueter/*/int main(void)pthread_t id1,id2; /* 线程号 */int i,ret;pthread_attr_t attr; /* 线程属性声明 */pthread_attr_init(&attr); /* 初始化线程属性 */pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); /* 设置绑定属性 */pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); /*设置分离属性*/ret=pthread_create(&id1,&attr,(void *) thread1,NULL); /* 创建线程 */if (0 != ret) printf (Create pthread error!n);exit (1);ret=pthread_create(&id2,NULL,(void *) thread2,NULL); /* 按默认属性创建线程 */if (0 != ret) printf (Create pthread error!n);exit (1);pthread_join(id2,NULL); /* 默认属性创建(非分离),故需要等待线程2结束 */return 0;4、相关文献1、基于信号量的Linux多线程同步研究 中文摘要:信号量是进程或线程之间相互通讯的手段之一。有效地使用可以在多线程之间实现同步和互斥,以保证程序的正确的运行。在对线程的数据结构和相关的10个函数分析的基础上,以一个具体的例子给出如何使用信号量机制实现多线程之间的同步。摘自墨客论文网:/view/20786.html2、多线程及Winsock在导弹仿真中的应用 中文摘要:WindowsNT的多线程能力适合处理并行性任务,在主线程中可以创建多个子线程,每个子线程可以独立完成一个子任务,一个程序可以同时完成多个任务。使用多线程技术,既加快了系统的反应速度,又提高了执行效率。该文介绍了 WindowsNT环境下基于MFC的多线程编程技术的原理、线程间的通信及同步控制的方法,以及Winsock网络编程的原理。最后介绍了在微机局域网 (LAN)下采用多线程和Winsock编程技术进行空空导弹分布式实时仿真系统的设计过程。摘自墨客论文网:/view/31671.html3、漫谈Java线程 中文摘要:多线程程序是Java语言的一个很重要的特点。本文针对Java平台中线程的性质和应用程序的多线程策略进行了分析和讨论。摘自墨客论文网:/view/33242.html4、基于多线程的小型工业实时监控数据库设计 中文摘要:提出了一种面向小型工业的实时监控数据库解决方案。采用ADO技术与多线程技术解决了过 程监控系统中实时数据的存储、管理和处理的问题。利用Visual C6.0语言编程,在自来水厂的Ethernet现场总线设备上对监控数据库进行试验运行,其性能稳定、运行可靠。摘自墨客论文网:/view/24738.html5、如何使用Visual C实现工作者线程与主线程间的可靠、安全通讯 摘自墨客论文网:/view/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 凿岩工岗前深度考核试卷含答案
- 水生产处理工安全培训模拟考核试卷含答案
- 二氧化碳树脂装置操作工岗前安全培训考核试卷含答案
- 铸管涂衬工岗后能力考核试卷含答案
- 水生产处理工操作规范强化考核试卷含答案
- 量具和刃具制造工冲突解决能力考核试卷含答案
- 击奏乐器制作工岗前前瞻考核试卷含答案
- 两栖类养殖工QC管理竞赛考核试卷含答案
- 裁剪工安全宣教知识考核试卷含答案
- 电化学精制装置操作工安全理论知识考核试卷含答案
- JJF(新) 129-2024 阻容法烟气含湿量测定仪校准规范
- 《临床心胸外科培训》课件
- 《超声诊断瓣膜病》课件
- 医疗器械监督管理条例培训
- 冷冻食品供货方案
- 2024年小学生航空航天知识竞赛题库附答案 (共150题)
- 军体拳第一套全套图文教程
- 针刺伤预防与处理-2024中华护理学会团体标准
- 店长周工作总结数据报表模板
- 羽绒原料购销合同
- 2-2新能源汽车充电系统检修
评论
0/150
提交评论