第六章 多线程 完全端口分享.pptxVIP

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
By wangjin;进程 含义:程序的一个运行实例 ;;什么时候 会创建进程呢?;Windows 进程 Linux 进程 区别;1.2多线程;多线程多个线程在运行。 多核CPU真正实现了并行执行任务,就像高速公路的交通状况一样,只是当量多了一样会堵车;多线程线程安全问题;1.Code Sample ;2.Code Sample ;3.Code Sample ;解决方法;线程同步问题;锁;锁 用于获取对共享资源的访问唯一性。保持代码执行的原子性, 中途不被打断 2.条件变量 条件变量一般配合锁使用 ,在获取锁之后 访问共享资源,然后 使用条件变量等待,等待其他 线程的唤醒 ;3.读写锁和信号量 读写锁效率低于 互斥锁mutex,每次加锁,都要更新Reader和Writer的数量。 信号量一般是用于并发访问,建议用ThreadPool来做。 4.多线程等待尽量避免使用Sleep()、Usleep()、nanosleep() Sleep()。 如果等待一段时间,使用eventloop 注册timer(),通过定时器来回调接着程序执行。 如果等待某个事件发生,使用条件变量 来等待出发通知。 sleep() 会阻塞线程Block() 不做其他事。 ;多线程同步总结点: 1.最低限度减少共享对象,减少同步场合。 2.同步使用非递归的互斥锁,条件变量, 慎用读写锁,不要用信号量(互斥锁,条件变量代替使用。) 3.不 自己编写 加锁 解锁 代码(尽量用RAII(资源获取及初始化) 来实现,利用类的构造和析构来完成创建,加锁,解锁,销毁) 4.不手工调用加锁,解锁,通过使用局部变量的类对象的 构造,析构 来加锁,解锁。 利用局部变量的作用域刚好是临界区。 通常称为(Scopde Locking) 5.每次使用Scoped Locking 时,思考以及持有的锁,防止加锁顺序 导致死锁。 6.不垮进程使用锁,跨进程 用TCP sockets。 7.加锁,解锁在同一线程,不让A 线程去解锁B 线程的 锁 9.使用Scoped Locking 时出现死锁时,打印调用堆栈定位死锁问题 ;;什么场景下需要用到多线程?;1.有多个CPU可以用,真正做到并发编程 2.线程间有共享数据,共享的数据可以修改 3.事件响应有优先级之分,通过设置线程优先级来提供优先服务。 4.异步操作,如Log file 。不论读还是写 log file 都不应该阻塞 5.操作第三方软件,如读取???据库。;Sample ;2.完成端口;完成端口使用的条件: 设备IO操作要支持重叠结构“Overlapped”异步通信 ;完成端口主要使用的函数;完成端口使用流程;讨论与交流

文档评论(0)

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

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

1亿VIP精品文档

相关文档