LINUX环境编程-线程编程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX环境编程-线程编程

LINUX应用编程 – 线程篇 2010年1月8日 目 录 概 述 线程间共享的资源 每个线程独有的 每个线程有自己的: 线程ID 寄存器集合,包括程序计数器和栈指针 栈(用于存放局部变量和返回地址) Errno 信号掩码 优先级 线程优缺点 优点: 占用较少的系统资源 共享数据容易,改善程序结构 提高应用程序响应速度 使用多处理器效率更高 缺点 内存共享会导致互相干扰 一个线程崩溃会导致整个进程崩溃 用户级线程与内核级线程 用户级线程 线程可以在用户层或者内核层提供 在用户层实现线程意味着内核并不知道线程的存在。 用户层线程库会实现线程的创建、删除、调度。 用户层的线程创建比较快 当某个线程要使用内核时,其余线程都会被挂起。 内核级线程 内核直接支持线程 线程的创建、删除和调度都有内核来做。 一个线程等待I/O阻塞时,其余线程可以继续运行。 创建等操作要进出内核,速度会慢些。 目前流行的操作系统都支持内核级线程。 多线程中的fork 在linux系统当一个拥有多线程的进程调用fork时,子进程只会有一个线程! 线程池 在程序设计中,并不是来一个任务/请求就创建一个线程,执行完毕线程退出。 程序初始化时创建一个线程池,线程池中有n个线程。 当一个请求来时,从线程池中取一个线程,完成请求后线程再放回线程池。 节省了频繁创建线程和销毁线程的开销。 线程创建:pthread_create pthread_create用来创建一个线程。 成功返回0,失败返回非0。 thread指向内存单元将被设置为新创建的线程ID,attr是要创建线程的属性(NULL为默认属性),start_routine为线程开始执行的函数,arg为start_routine的参数。 线程程序在编译链接时必须使用-lpthread库 如 g++ first_thread.cpp –lpthread 在任一个线程中执行exit均会使整个进程退出 start_routine的参数和返回值都为void *,如果有多个参数,那只能打包成一个结构体。返回值不能是局部变量! 线程的终止 如果进程中的任意线程调用exit、_exit、_Exit,那么整个进程都会被终止。 线程从启动函数中返回,返回值是线程的退出码。 线程可以被其他线程取消 线程调用pthread_exit退出。 pthread_exit 调用pthread_exit后,线程终止。 参数value_ptr会被后来调用pthread_join函数的线程获得! pthread_join的第一个参数指定某个线程,第二个参数用来接收线程的退出值。 线程ID pthread_self返回调用线程的线程(pthread_t)ID。 当比较两个线程是否是同一个线程,需要用pthread_equal函数.若t1和t2为同一线程,则函数返回非0值,否则返回值为0。 线程属性 pthread_create的第二个参数就是线程的属性,传入NULL表示使用默认属性。 可以用过pthread API来修改线程的属性。 线程分离函数 当一个线程被创建时,系统给它创建一个线程控制块(有thread id来标识)。如果线程没有设置分离属性,那么需要其它线程通过pthread_join来回收这个线程控制块。如果设置了分离属性,那么线程结束时自动释放创建时分配的资源。 pthread_detach用来设置分离属性,但须注意必须在新创建的线程结束之前!一般来说这个函数是由新建线程进入启动函数后立马调用的,调用格式如下: pthread_detach(pthread_self()); 线程属性函数 pthread_attr_init用默认值初始化线程的属性。 成功返回0,失败返回非0值。 pthread_attr_destroy用来销毁init分配的内存。该函数理论上都会执行成功,除非你传入了一个非法的属性指针。 成功返回0,失败返回非0。 线程分离属性 两个函数的第一个参数都是属性。 pthread_attr_setdetachstate用来设置分离属性,第二个参数有两个值PTHREAD_CREATE_DETACHED 和 PTHREAD_CREATE_JOINABLE。 pthread_attr_getdetachstate用来获取分离状态。 注意:线程一旦设置了分离状态,再调用pthread_join就会出错。 线程栈属性 进程栈空间需要被不同的线程共享,所以可能会出现栈空间不够的情况。此时可以用malloc从堆中分配内存给线程当做栈来使用。 pthread_attr_setstack设置堆栈时,第二个参数是内存的起始地址,第三个参数为内存的大小。 pthread_attr_setstacksize

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档