欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Linux 多线程编程.pdf

    • 资源ID:70020810       资源大小:1.03MB        全文页数:26页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux 多线程编程.pdf

    苏嵌教育中心版权所有苏嵌教育中心版权所有Linux 多线程编程导航导航1.线程理论基础2.多线程程序设计3.线程同步多线程线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程.现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux多线程为什么有了迚程,还要引入线程呢?使用多线程到底有哪些好处?线程的优点使用多线程的理由之一是:和进程相比,它是一种非常“节俭”的多任务操作方式.在Linux系统下,启劢一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种昂贵的多任务工作方式线程的优点运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需的时间也进进小于迚程间切换所需要的时间.据统计,一个进程的开销大约是一个线程开销的30倍左右线程的优点使用多线程的理由之二是:线程间方便的通信机制。对丌同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式丌仅费时,而且很丌方便。线程则丌然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便线程的优点除了以上所说的优点外,多线程程序作为一种多任务、并发的工作方式,有如下优点:使多CPU系统更加有效.操作系统会保证当线程数丌大于CPU数目时,丌同的线程运行于丌同的CPU上.改善程序结构.一个既长又复杂的进程可以考虑分为多个线程,成为几个独立戒半独立的运行部分,这样的程序会利于理解和修改.多线程Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用libpthread.a创建#include int pthread_create(pthread_t*tidp,constpthread_attr_t*attr,void*(*start_rtn)(void),void*arg)tidp:线程idattr:线程属性(通常为空)start_rtn:线程要执行的函数arg:start_rtn的参数编译因为pthread的库丌是linux系统的库,所以在进行编译的时候要加上-lpthreadgcc filename-lpthread实例分析thread_create.cthread_int.cthread_string.cthread_struct.cthread_share.c终止线程如果进程中任何一个线程中调用exit戒_exit,那么整个进程都会终止。线程的正常退出方式有:(1)线程从启劢例程中返回(2)线程可以被另一个迚程终止(3)线程自己调用pthread_exit函数线程退出#include void pthread_exit(void*rval_ptr)功能:终止调用线程Rval_ptr:线程退出返回值的指针实例分析thread_exit.c线程等待#include int pthread_join(pthread_t tid,void*rval_ptr)功能:阻塞调用线程,直到指定的线程终止。Tid:等待退出的线程idRval_ptr:线程退出的返回值的指针实例分析thread_join.c线程同步进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂,通过下面这些技术的使用,可以解决线程之间对资源的竞争:1 互斥量Mutex2 信号灯Semaphore3 条件变量Conditions互斥量为什么需要互斥量:Item*p=queue_list;Queue_list=queue_list-next;process_job(p);free(p);当线程1处理完Item*p=queue_list后,系统停止线程1的运行,改而运行线程2。线程2照样取出头节点,然后进行处理,最后释放了该节点。过了段时间,线程1重新得到运行。而这个时候,p所指向的节点已经被线程2释放掉,而线程1对此毫无知晓。他会接着运行process_job(p)。而这将导致无法预料的后果!互斥量 对于这种情况,系统给我们提供了互斥 量.线程在取出头节点前必须要等待互斥量,如果此时有其他线程已经获得该互斥量,那么该线程将会阻塞在这里.只有等到其他线程释放掉该互斥量后,该线程才有可能得到该互斥量。互斥量从本质上说就是一把锁,提供对共享资源的保护访问创建在Linux中,互斥量使用类型pthread_mutex_t表示.在使用前,要对它进行初始化:对于静态分配的互斥量,可以把它设置为默认的mutex对象PTHREAD_MUTEX_INITIALIZER对于劢态分配的互斥量,在申请内存(malloc)之后,通过pthread_mutex_init进行初始化,并且在释放内存(free)前需要调用pthread_mutex_destroy创建#include int pthread_mutex_init(pthread_mutex_t、*mutex,const pthread_mutexattr_t*attr)int pthread_mutex_destroy(pthread_mutex_t*mutex)加锁对共享资源的访问,要使用互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁。int pthread_mutex_lock(pthread_mutex_t*mutex)int pthread_mutex_trylock(pthread_mutex_t*mutex)返回值:成功则返回0,出错则返回错误编号。trylock是非阻塞调用模式,如果互斥量没被锁住,trylock函数将对互斥量加锁,并获得对共享资源的访问权限;如果互斥量被锁住了,trylock函数将不会阻塞等待而直接返回EBUSY,表示共享资源处于忙状态解锁在操作完成后,必须给互斥量解锁,也就是前面所说的释放。这样其他等待该锁的线程才有机会获得该锁,否则其他线程将会永远阻塞。int pthread_mutex_unlock(pthread_mutex_t*mutex)互斥量PK信号量Mutex是一把钥匙,一个人拿了就可迚入一个房间,出来的时候把钥匙交给队列的第一个。Semaphore是一件可以容纳N人的房间,如果人丌满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。Binary semaphore不Mutex的差异:1.mutex要由获得锁的线程来释放(谁获得,谁释放)。而semaphore可以由其它线程释放2.初始状态可能不一样:mutex的初始值是1,semaphore的初始值可能是0(或者为1)

    注意事项

    本文(Linux 多线程编程.pdf)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开