linux系统课程-课件09day07信号08编程_第1页
linux系统课程-课件09day07信号08编程_第2页
linux系统课程-课件09day07信号08编程_第3页
linux系统课程-课件09day07信号08编程_第4页
linux系统课程-课件09day07信号08编程_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LWP:lightweightprocess轻量级的进程,本质仍是进程(Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享 独居(进程);合租(线Linux下 LinuxUnix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了轻量级进程(light-weightprocess)PCB,创建线程使用的底层函数和进程一样,clonelinux下,线程最是小的执行单位;进程是最小的分配资源单位LWP号:ps–Lfpidlwp号。 (可看成数组,首地址位于PCB中)-->页表-->物理页面--参考Linux内核源代码情景分析》----对于进程来说,相同的地址(同一个虚拟地址)在不同的进程中,反复使用而不。原因是他们虽虚拟址一样,但,页、页表、物理页面各不相同。相同的虚拟地址,映射到不同的物理页面内存单元,最终不同的物理页面。PCB,但共享同一个页,也就共享同一个页表和物理页面。所以两个PCB共个地址空间。clone。如果对方的地址空间,那么就产出一个“进程;如果共享对方的地址空间,就产因此:Linux内核是不区分进程和线程的。只在用户层面上进行区分。所以,线程所有操作函数pthread_*是库函数,而非系统调用。ID内存地址空间errno字优点:1.提高程序并发 2.开销 3.数据通信、共享数据方缺点:1.库函数,不稳 2.调试、编写3.对信号支持不pthread_selfIDgetpid()pthread_t ID;失败:无!ID是进程内部,识别标志。(ID允许相同pthread_ttidpthread_create传出参数来获IDpthread_self。 其作用,对应进程中fork()函数*),void unsignedlong 3:函数指针,指向线程主函数(线程体),该函数运行结束,则线程结束。pthread_create的函数指针start_routine决定。start_routinepthread_createarg参数传递给它的,该void*,这个指针按什么类型解释由调用者自己定义。start_routine的返回值void*,这个指针的含义同样由调用者自己定义。start_routine返回时,这个线程pthread_join得到start_routine的返回值,类似于父进程调用wait(2)pthread_join。pthread_createidthread参数所指向的内存单元。我们知道进程id的类型是pid_t,每个进程的id在整个系统中是唯一的,调用getpid(2)能是一个结构体,也可能是一个地址,所以不能简单地当成整数用printf打印,调用pthread_self(3)id。attrNULLattr参数,表示线程属性取缺省值,感的读者可以参考APUE。_exitmainreturnexit,为了防pthread_create4修改为(void*)&i,i=*((int线程mmap。pthread_exit sleep控制输出顺序的情况下。pthread_create5个3exit,将整个进程退出了,所以全部线程退出了。returnexit。另注意,pthread_exitreturn返回的指针所指向的内存单元必须是全局的或者是用特别注意:main()pthread_exit出exit:将进程退出。pthread_join 其作用,对应进程中waitpid()函数intpthread_join(pthread_tthread,void**retval);成功:0;retval:对比进程中:main返回值、exit参数-->intwait函数参数-->int数参数-->void**retvalidthread的线程终止。thread线程以不同的方pthread_join得到的终止状态是不同的,总结如下:threadreturn返回,retvalthread线程函数threadpthread_cancel异常终止掉,retval所指向的单元PTHREAD_CANCELED。threadpthread_exit终止的,retval所指向的单元存放的是传pthread_exit的参数。如果对thread线程的终止状态不感,可以传NULL给retval参数);pthread_create2(线程属性)pthread_join获取它的状态为止。但是线程也可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。detachpthread_join,EINVALpthread_detach就pthread_join了。pthread_cancel 其作用,对应进程中kill()函数intpthread_cancel(pthread_tthread);成功:0类似于玩游戏存档,必须到达指定的场所(存档点,如:客栈、仓库、城里等)才能 执行命令man7pthreads可以查看具备这些取消点的系统调用列表。也可参阅APUE.12.7取消选项小节。pthreestcancel函数自行设置一个取消点。Linuxpthread库中。常数PTHREAD_CANCELED的值是-1pthread.h中找到它的定义:#definePTHREAD_CANCELEDvoid*)-1)。因pthread_join回收时,得到的返回值为-1。终止线程方returnmainreturn相当于调exit。pthread_equalIDLinuxIDpthread_t进 线 线程属性(扩展性了解typedef{ structsched_param schedparam;//线程的调度参数 inheritsched;//线程的继承性 ;// //线的位 //线的大}线大小(默认平均分配3.3. APUE.12.3pthread_attr_init,pthread_createpthread_attr_destroy函数来释放(scopesizeaddess(prioritystateparameterspthread_create创建线程intpthread_attr_init(pthread_attr_t*attr);成功:0;失败:错误号;线程的分离状态(掌握设置线程属性,分离or获取程属性,分离or参数:attrdetachstatePTHREAD_CREATE_DETACHED(分离线程)PTHREAD_CREATE_JOINABLE(离线程)况可以采取一定的同步措施,最简单的方法之一是可以在被创建的线程里调用pthread_cond_timedwait函数,让这个线程等待一会儿,留出足够的时间让函数pthread_create返回。设置一段等待时间,是在多线程编程里常用的方法。但是注意不要使wait()之类的函数,它们是使整个进程睡眠,并不能解决线程同步的问题。 定义了两个常量 _POSIX_THREAD_ATTR_STACKSIZE检测系统是否支持栈属性。也可以给sysconf函数传递当进地址空间不够用时,指定新建线程使用由malloc分配的空间作为自己的栈空pthread_attr_setstackpthread_attr_getstack两个函数分别设置和获取线程的栈intpthread_attr_setstack(pthread_attr_t*attrvoid*stackaddrsize_tstacksize);成功:0;,,);参数:attr:指向一个线程属性的指针和,);号);号参数:attr:指向一个线程属性的指针#include#defineSIZE0x100000void*th_fun(void*arg){while}int{pthread_tinterr,detachstate,i=1;pthread_attr_tattr;size_tstacksize;void*stackaddr;pthread_attr_getdetachstate(&attr,&detachstate);printf("threaddetached\n");elseif(detachstate==PTHREAD_CREATE_JOINABLE)printf("threadjoin\n");printf("threadwhile(1)stackaddr=malloc(SIZE);if(stackaddr==NULL){}stacksize=e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论