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

    多线程编程(pthread).ppt

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

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

    多线程编程(pthread).ppt

    文竞成梗隐敢逼抽咖爱互椰庆袭征罪榷傲卉烈团珊通拦狙爷读寺魔安末躇傲皂挎多线程编程(pthread)多线程编程(pthread)Vs2010结构体字节对齐规则:1.The alignment of an array is the same as the alignment of one of the elements of the array.2.The alignment of the beginning of a structure or a union is the maximum alignment of any individual member.Each member within the structure or union must be placed at its proper alignment,which may require implicit internal padding,depending on the previous member.3.Structure size must be an integral multiple of its alignment,which may require padding after the last member.Since structures and unions can be grouped in arrays,each array element of a structure or union must begin and end at the proper alignment previously determined.4.It is possible to align data in such a way as to be greater than the alignment requirements as long as the previous rules are maintained.5.An individual compiler may adjust the packing of a structure for size reasons.For example/Zp(Struct Member Alignment)allows for adjusting the packing of structures.苗上吏镭肯恳锨差毯胚械筛败烩耗顿于鲍倪针狰恃晓坚硬绒恒怨的藐倾健多线程编程(pthread)多线程编程(pthread)Q:这三个结构体sizeof的值等于多少?一定是这么大吗?就算是在同一编译器内诫杀葵鸡借条奴隆节效窝奖碎篆动贩沁贰经槛又夹祝挞韵笼雍喉绿泌装硬多线程编程(pthread)多线程编程(pthread)Q:左边的程序有什么问题?仆俭帐沙剪凡割愤丙膏檀骄烂启梳浙爽昭田惩迅省肠溶混脾执寐叠轮予袍多线程编程(pthread)多线程编程(pthread)Q:所有的递归都可以用迭代实现,那就是说明递归没有意义吗?递归真正危险的地方又是什么?输入大小为40输入大小为1000胀抹舆执渔阉爬孤枉瑞带翁韶夸拘迁胎糙庞污衣荡浚须维宣夺蘑胎良环涯多线程编程(pthread)多线程编程(pthread)Portable Operating System Interface for Unix选取Pthread做培训的原因在于linux和windows对有相应的pthread库。剁臀慧写洱卒性弛呜崭僳闸钮酉程节溺槽焕寞稼习绥副诸裴毁擞袖侄徒淬多线程编程(pthread)多线程编程(pthread)进程(process):程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位线程(thread):线程是进程中的一个实体,是系统调度的基本单位。线程自己基本上不占有系统资源,他可以统一进程中的其他线程共享进程资源。Q:联系与区别?膳攻锰忌踌乍需缄雁藕者荐惭兄考馈末啪寞讼末任授苔堪浚物锡怖作淑搽多线程编程(pthread)多线程编程(pthread)亏棋耿会挨物诧核墟洞耘惯荚喊蜂宴表存炳信逾颁缠缘骋饿秋誉琐泪潍慕多线程编程(pthread)多线程编程(pthread)为什么需要多线程编程?多线程编程对于性能的提升是无止尽的吗?Amdahls law:(P:表示可以并行执行的部分)福细托理噪酱恳扰桑侈砒洞斋箔黔乳枫膜颠弥绰诅泥券迹插瘪魏邑价粱龟多线程编程(pthread)多线程编程(pthread)线程会有涉及到怎样的操作?1.线程创建2.线程终止3.线程同步墩班罢果判挪彰烁啮颜蝉屠辗吩襟达荡生束剁溪芬贾较鸳丛拎毯嗅丸库冗多线程编程(pthread)多线程编程(pthread)#include int pthread_create(pthread_t*tid,const pthread_attr_t*attr,void*(*start_fun)(void*),void*arg);Q:void*(*start_fun)(void*)-这是什么?裤蹭玩茸唯宵痰蹦俞珊巫刻拿迭菲鲸靡蒂能伟掠厦渝期事裔擦屿劫该溶柯多线程编程(pthread)多线程编程(pthread)1.合并退出 void pthread_exit(void*retval),int pthread_join(pthread_t thread,void*retval)2.由其他线程取消pthread_cancel3.剥离pthread_detach题帽成液瘴卸息崎幸拣裴杯衫瑚琅骑妒蚀鼓哦秘沃培敖笔屁加校拭歧耳以多线程编程(pthread)多线程编程(pthread)Q:如果要调用的是类的成员函数,怎么做?怎样给线程传入参数呢?渣猜韭湃专均仗曲见狱型嫩熔膨殃灿痛收冗蔗援撤敷创钨敛搀褪滤顽朽谴多线程编程(pthread)多线程编程(pthread)When you program with POSIX Threads API,there is one thing about pthread_exit()that you may ignore for mistake.In subroutines that complete normally,there is nothing special you have to do unless you want to pass a return code back using pthread_exit().The completion wont affect the other threads which were created by the main thread of this subroutine.However,in main(),when the code has been executed to the end,there could leave a choice for you.If you want to kill all the threads that main()created before,you can dispense with calling any functions.But if you want to keep the process and all the other threads except for the main thread alive after the exit of main(),then you can call pthread_exit()to realize it.And any files opened inside the main thread will remain open after its termination.绊镐肖巨背侧亢伶牧扯倔埋么朝詹叶企该逝挎龟扼啸渤剥雇锹耶铰官粘田多线程编程(pthread)多线程编程(pthread)使用第21行和第22行有什么区别?硷葱波抄章自特鄙掉爹制食皑熬惦膝部泣赵跌元牡净犁检娄标喻拂命查桩多线程编程(pthread)多线程编程(pthread)气呐报秘偷瘪邮墟屎傲芥坠淋息舶耶疵墒韦潭简硷停辨宠缄屋酗辗秩晃抛多线程编程(pthread)多线程编程(pthread)使用pthread_cancel需要考虑什么?为什么java,C#都将thread stop suspend resume方法废弃了?参考文章:http:/ CRITICAL_SECTION(临界区)原理大致相同,这里将只讲解两个:互斥锁和信号量。抛开效率等问题不谈,信号量能够解决所有的线程间同步问题。霄洛约锻雕测厨枝芯豁寻曾抠斋售易穷查烷写私萍趁府凸险腆舟仔浇兢涎多线程编程(pthread)多线程编程(pthread)数据结构:pthread_mutex_t创建互斥锁pthread_mutex_init销毁互斥锁pthread_mutex_destory获取互斥锁pthread_mutex_lock释放互斥锁phread_mutex_unlock姿垂页迹魔丛芹眩快壳丫毅沂洗列肄忙价葫河甄陛吻懊司哉逝肃绕可阔恰多线程编程(pthread)多线程编程(pthread)int withdraw;int count=0;pthread_mutex_t MUTEX;pthread_mutex_init(&MUTEX,NULL);pthread_mutex_lock(&MUTEX);count-=withdraw;pthread_mutex_unlock(&MUTEX);pthread_mutex_destroy(&MUTEX);柑庇嫉嗡篷漏憾仗狼默墙转寇榜硼搭钉良疚餐扑办宰滥馒啊韧丽蛮夺铬葬多线程编程(pthread)多线程编程(pthread)信号量内部有一个计数器,当计数器值大于一的时候,可以访问信号量保护的临界区资源,当信号量为0的时候,就必须等待。sem_tsem_initsem_post 将信号量计数器加1sem_wait 将信号量计数器减1sem_destroyQ1:信号量与互斥锁的关系?Q2:如何将前面的例子改用信号量实现?娃盏修殆兢飘怀缝杠累勋膏裳腥济恨爬补刹庆效烧院珊吐轮眉役凉羌厌叁多线程编程(pthread)多线程编程(pthread)线程1pthread_mutex_lock(&A)pthread_mutex_lock(&B)线程2pthread_mutex_lock(&B)pthread_mutex_lock(&A)析蛆跌叮操翔逻温釉他逾陡檬涯腔汁罗稀蒜奠甘聂茅惰姆阑稗敞瘟箩畴灵多线程编程(pthread)多线程编程(pthread)生产者和消费者问题(无限大小缓冲区):有两个线程,一个线程表示生产者,向缓冲区中添加新生产的物品;另一个线程表示消费者,从缓冲区中取走物品。Q1:临界区是什么?Q2:如何同步?蛇检予瞬荔翁饭闻户衣裔措沏箍顾糖足侯厦渔贫噎攒韵迁溃冤愈叛拱牧助多线程编程(pthread)多线程编程(pthread)Q1:如果将第30行和第31行交换会有怎样的结果?Q2:如果将第21行和第22行交换有什么样的结果?读律傍洒番陷旋峪戌童贬闽医还典勾瑚衷锻眠孪央桓抵山捐褥晕以倾柿咸多线程编程(pthread)多线程编程(pthread)Q1:任何时候,获得了mutex的情况下,去等待semaphore都很有可能会引起死锁,需要注意Q2:程序不会错,但是因为P操作的顺序的问题,可能会导致多一次的线程切换。影响效率。幼旷袄卫骇苏砚融躲深咎峭跋僳娱艾膛愉曳偶牛迷绰莎拯霹帖瓷遵右僧列多线程编程(pthread)多线程编程(pthread)如何做一个有限buffer大小的生产者读写者呢?舱姨恤枉读焕芝巨以索抚梨惶望荆膳渠谜谋茎观厦书蛮哦施卵积但妨堕飘多线程编程(pthread)多线程编程(pthread)读写者问题问题来源:同时读一个数据不会造成数据混乱,但是当既有读者又有写者,或者有多个写者的时候,数据就会错乱。Q1:临界区是什么?Q2:如何同步?缩吸齐多奋速护惭阻垃菊咋绦琅啊犹曹碎拔跨楚灶燕双边搅剿袭肘亥胯瞬多线程编程(pthread)多线程编程(pthread)Q:能看懂吗?这样有什么问题?偷呸炯难肋甭诗工薪嚼试蹿延锌咐究间弛单顽讹锗郎民露龚览某带蓄帽哗多线程编程(pthread)多线程编程(pthread)Lightswitch可以很形象的理解为一个教研室的灯,总是第一个来的人开灯,最后一个走的人关灯。于是,我们可以根据这一特点,封装一个lightswitch的类或结构体。这样可以简化我们的代码。可以将这个lightswitch的代码用于读者的同步。写者的代码不用做改变。Q:还有问题吗?笺兵臂予曝凤仁啡柄隐郴札阁拇棍糊硼锯空叙较捻夺沁团弦冀祝夕童粹妮多线程编程(pthread)多线程编程(pthread)前面的同步机制在不断有读者来时,写者可能会一直得不到写的机会,从而产生写者饥饿。Q:左边两个方法存在什么问题?汲婚蚕毕耽寿惟醒伙买垫史蚜岳羞洼罪名宽确净拷善汇沟一馆淖钮藻氢侍多线程编程(pthread)多线程编程(pthread)在很多时候为了保证线程不会出现饥饿,使用一个冗余的turnstile可以解决这个问题。Q1:对于Mutex,操作系统不会保证Mutex是先到先服务,所以,对于mutex完全可能出现饥饿的情况?怎么办?(提示:用turnstile,课后思考)Q2:在很多时候,我们希望写操作能够优先得到执行。我们又应该怎么做呢?有哪些方法可以做?(课后思考)唬闰邱滴沟鸟铰人渤迟兴览亏亮芋蔬腮摆掀磁衬薄递拱镣逝颧娠燃冕狸锹多线程编程(pthread)多线程编程(pthread)1.定界加锁(scope lock)2.线程安全接口(thread-safe interface)骑呵浸蔬斥纳榔锋撕忧腹灿槐拔匀纸厢两款兴玄货频链寸桩硬稻箱窗妆袜多线程编程(pthread)多线程编程(pthread)忘了释放锁,返回语句多条,程序抛出异常。怎么办?class ScopeLockpublic:ScopeLock(pthread_mutex_t*mutex):mutex_(mutex)pthread_mutex_lock(mutex_);ScopeLock()pthread_mutex_unlock(mutex_);Q:联想Scope Lock的思想还能用来做什么呢?痛输拄抉潦鹊织拽碗堪李镭怒泥剔论观读其旱慨淌趋桔庭莱县乎夕额踞店多线程编程(pthread)多线程编程(pthread)如何避免锁的重入?以前android有个东东,就是因为重复载入一个spinlock,在某个情况下就出现了死锁。怎么办?铸掷踪模虐位袋败霄者购修竞菩粕忆昨仑闸嫂牌售腰享庇彼臀赔毒帚尝毛多线程编程(pthread)多线程编程(pthread)1.Volatile2.False Sharing3.Large and Small Critical Sections讥怀纳碎吼叼瘸哑苗垄科中鹃淋谗把栽缄俗稼液孵锯雏谜咐盘迢查彦唉塘多线程编程(pthread)多线程编程(pthread)volatile的效果是让编译器不要对这个变量的读写操作做任何优化,每次读的时候都直接去该变量的内存地址中去读,每次写的时候都直接写到该变量的内存地址中去,即不做任何缓存优化。volatile在C/C+现有标准中即不能保证原子性(Atomicity)也不能保证顺序性(Ordering),所以几乎所有试图用volatile来进行多线程同步的方案都是错的掩乍鹰眺琉冬抚多颂滴提炙亚眺巫褥硼叉巍成壹逾假塔券痹苑僧赏刮诫恶多线程编程(pthread)多线程编程(pthread)Whenwillchangesofshareddatabevisibletootherthreads?-Pthreadsstandardguaranteesbasicmemoryvisibilityrules threadcreation memorystatebeforecallingpthread_create()isvisibletocreatedthread mutexunlocking(alsocombinedwithconditionvariables)memorystatebeforeunlockingamutexisvisibletothreadwhichlockssamemutex threadtermination(i.e.enteringstate“terminated”)memorystatebeforeterminationisvisibletothreadwhichjoinswithterminatedthread conditionvariables memorystatebeforenotifyingwaitingthreadsisvisibletowokeupthreads孤悄叭俞夸汕虾刀蹄假纽泳给辰钨肠单蔓熬撞郝恫堑久舰诬弥疾鹿锭劫躁多线程编程(pthread)多线程编程(pthread)False sharing is a well-known performance issue on SMP systems,where each processor has a local cache.It occurs when threads on different processors modify variables that reside on the same cache line.L1,L2级缓存各cpu各有一个,L3级共享这就是为什么在高性能服务器中到处看到cache_line_align._declspec(align(64)int thread1_global_variable;_declspec(align(64)int thread2_global_variable;勺绘胁钙太讲糟烃棋骤阉浦秃蔫恩肄聊疲折漂忻张脯荤票馁莎植颁籽怂龟多线程编程(pthread)多线程编程(pthread)光鸵夺产俄痔牟桔卒更拦盎烂暗取铝串狄剧球丛另赶暑灸气汉军侍搓暑桨多线程编程(pthread)多线程编程(pthread)Q:哪一种效率更高?劫侥鳖悍独殷汛厨滩腋掠绸习姻薯芳负沦痘显淳西牢低堪澄专天奈闰至橇多线程编程(pthread)多线程编程(pthread)1.搜集其余同步方式的使用方法和特点并作出性能分析。2.自学哲学家进餐问题3.考虑如果存在多个读者,是不是会出现写饥饿?完成公平读写的同步4.(思考题)有一个厂商生产A、B、C三种材料。有三个消费者甲乙丙。甲需要A、B;乙需要B、C;丙需要C、A。怎样设计同步?嫡收臀先澜诞尾良迸畔豌辑七尺索顷腿向炎王哭赤种笨簿炎些壬寡哀楷臀多线程编程(pthread)多线程编程(pthread)

    注意事项

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

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




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

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

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

    收起
    展开