当前位置: 首页 > news >正文

杭州网站建设公司排名深圳专业做网站排名公司哪家好

杭州网站建设公司排名,深圳专业做网站排名公司哪家好,怎么在网上接网站建设,软件技术专业专升本考试科目我们再回顾一下#xff0c;原子性问题的根源是CPU切换线程执行指令所导致的#xff0c;当前一个对共享变量的操作没有完成之前#xff0c;CPU又切换到另外一个线程来操作对应的共享变量#xff0c;那么最终产生的结果就可能出现问题。比如如果现在有两个线程都在执行number…我们再回顾一下原子性问题的根源是CPU切换线程执行指令所导致的当前一个对共享变量的操作没有完成之前CPU又切换到另外一个线程来操作对应的共享变量那么最终产生的结果就可能出现问题。比如如果现在有两个线程都在执行numbernumber1他们最终的结果可能还是为1,因为PU执行流程可能会如下如解决原子性问题从上面的案例看原子性问题的丢失完全是因为CPU切换线程执行指令导致的那么是否意味着只要禁止CPU切换线程执行指令就可以呢结果是行不通的禁止CPU切换指令在单核CPU的确可以解决这个问题但是多核CPU的场景下CPU可以同时调度多个线程执行指令那么该问题还是存在的。所以我们必须另找出路回过头来思考我们会发现一个共性就是不管是线程切换还是多核CPU同时执行指令其实根本原因就是对于共享变量在修改操作在一个线程没有完成之前另外一个线程是可以同时介入操作,所以才会导致一个线程的结果可能被另外一个线程覆盖。如果从这个角度来考虑的话那么是不是只要达成一个线程在操作共享变量的过程中另外一个线程是不能介入操作只有等前面一个线程执行完之后后面的线程才可以操作也就是让两个线程对于共享变量的操作是互斥的那么问题就可以解决而让两个线程操作互斥我们常用的手段就是“加锁”。互斥锁能保证多个线程进程、操作者对于共享变量共享资源的操作是互斥的也就是我们常说的“互斥锁”锁是一个通用的概念在很多领域都有锁的机制、使用锁的目的也很简单就是“保证操作的原子性”。锁这个名字虽然很形象但是类比到我们现实世界往往容易造成困惑比如现实世界的门锁我们开门的必须是用钥匙而不是需要获取锁而且现实世界一个锁会有多个钥匙这在编程领域是不允许的所以我更愿意把锁的意思解释成“使用权”。每个操作者需要操作共享资源时必须首先获得这个共享资源的使用权才可以进行操作而当一个人拥有了共享资源的使用权之后另外一个人是想要操作共享资源就之后就只能等待前者操作结束后释放共享资源的使用权。当我们对某个共享资源加锁之后如果线程想要访问共享资源那么它首先要拿到这个对象的锁当某一个线程获取到锁时它便可以访问共享资源 没有获取到锁的线程只能等待直到上一个线程执行完毕之后释放锁再进行下轮锁的竞争因为只有一把锁所以永远只会有一个线程操作该资源。加了锁之后那么最后执行的流程就如下管程模型使用互斥锁是为了线程杜宇共享资源的互斥性对于共享资源的操作只允许有一个线程进行。但是在锁的获得与释放线程之间需要如何进行配合和协调又是一个问题这也就是线程“同步”问题所以解决共享变量的访问过程的原子性其实需要解决两个问题一个是线程之间的互斥二是线程之间的协调同步。对于这两个问题计算机领域有有一种成熟的方法论来解决它就是管程。管程是一个抽象的概念模型为了解决多个进程或线程同时访问一个共享资源时能达到互斥和同步的效果它定义了管理共享资源的访问过程的模型任何语言都可用通过都可以通过这套模型编写出安全的并发程序管程实现必须达到下面几点要求1、管程中的共享变量对于外部都是不可见的只能通过管程才能访问对应的共享资源(意思是共享变量的操作必须通过管程无法通过其他途径操作)。2、管程是互斥的某个时刻只能允许一个进程或线程访问共享资源(线程对于管程的访问是互斥的)。3、管程中需要有线程等待队列和相应等待和唤醒操作没获得锁的线程放入一个队列中等待等前一个线程释放锁后可以通过某种机制唤醒等待队列中的线程。4、必须有一种办法使进程无法继续运行时被阻塞(在程序要求的逻辑条件不满足的时候可以使其阻塞)。我们来理解下上面几个条件首先第1点 和第2点我们都能理解只能通过管程访问共享资源并且每次只能有一个线程获得管程的执行权这两个要求理解起来很简单其实就是为了让线程之间达到互斥的效果。然后看第3点要求管程中要有等待队列和响应的等待和唤醒操作这个也好理解等待队列和唤醒可以使线程之间达到同步有序的执行。第4点是比较让人费解的什么时候线程会无法继续运行呢为什么要在这个时候提供线程可以进入阻塞的方法。咱们看一个案例场景假如我们正在开发一个互联网项目角色项目参与人员有产品经理、开发人员、测试人员参与限制只有一个办公室可以使用一个办公室一次只能容纳一个角色进入。节点 每个角色负责对应的节点产品经理产品文档、开发人员产出项目代码、测试人员测试代码质量、产品进行验收。条件开发人员必须有了产品文档之后再产出项目代码、测试人员在开发人员开发完毕了之后进入测试、产品人员在测试完毕了之后进行验收。在这个场景里面多个角色就是系统的多个线程办公室是一个共享资源同一时刻只能有一个角色进入这个场景里面就有一个阻塞场景就是当一个开发人员抢到了办公室钥匙之后进入到办公室结果发现产品的需求都没有出来这个时候开发人员是没有办法进行工作的所以只能一直等等到有产品文档之后继续下一步但是这个时候产品是没办法进入办公室工作的因为锁在开发人员手里所以开发人员一直等不到需求文档而产品经理一直进入不了办公室导致死锁。那么这里就需要有一种方式当开发人员发现条件不成立的时候此时开发人员可以主动的放弃办公室的锁然后告诉办公室门口的产品经理让产品经理先进办公室完成工作开发人员自己则进入一个等待队列当产品经理完成了工作之后产品经理通知开发人员然后自己放弃房间钥匙等待需求验收再开始下一轮的工作。最后以这种条件阻塞的方式让获得锁的线程可以主动让出锁并等待其他线程唤醒再来检测条件避免了某一个线程因为条件不满足导致任务无法进行而因为别的线程无法进入到管程里导致这个条件永远也无法改变锁造成的死锁问题。下面这张图虽然不严谨但是有助于你理解整个管程模型JAVA中的管程 通过上面的管程我们再来看JAVA里面的管程JAVA是通过Synchronized关键字和wait()、notify、notifyAll() 方法实现了整个管程模型 与上面标准的管程模型不同的是JAVA的Monitor属于一种简单的管程模型因为它并没有使用多个条件变量的队列不管是竞争锁产生的阻塞还是拿到锁因为某个条件不合格导致的阻塞统一都放入一个队列了。下面我们同样通过一张图来理解
http://www.pierceye.com/news/993483/

相关文章:

  • 网站建设云南做静态网站成本
  • 超低价的锦州网站建设网站开发有哪些软件有哪些
  • 中英文网站后台photoshop做网站
  • 优秀网站开发公司软件开发工具与环境实践报告
  • 茂名网站开发网站关键词优化步骤
  • 介绍家乡的网站怎么做天眼查企业查询公司
  • 公司网站建设代理一般做多久苏州关键词优化企业
  • 北京网站网站建设vps做网站怎么加速
  • 销售网站怎么做一个公司可以做多少网站
  • 西安旅游攻略必去景点网站优化成都哪里好
  • 网站特色泉州做网站优化价格
  • 小米官方网站开发版在哪里推进门户网站建设 用好用活
  • 玉器企业网站源码软件商店哪个好用
  • 学校网站建设的安全策略江苏太平洋建设集团官方网站
  • 织梦做中英文企业网站给特宝网站商家网址怎样做
  • 网站邮箱接口怎么设置WordPress国外主机
  • 西安做网站的公司哪家好怎么样查询网站被挂黑链
  • 卯兔科技网站建设河南旅游集团 网站建设
  • 重庆网站建设c做食品网站的素材
  • 网站如何制作的简单的管理系统有哪些
  • 职高网站建设知识点一个人开发一个网站需要多久
  • c 做的网站怎么上传博客 选择 WordPress
  • dw可以做有后台的网站么?泰安抖音seo
  • 龙岗网站建设 信科网络网站备案后要做什么
  • 深圳建立网站公司网站公众号开发一般收费
  • 网站建设要做什么有关网站建设的书
  • 网站前台开发由什么做的seo网络贸易网站推广
  • 网站设计与开发范本wordpress 左图右文
  • 网站后台的搭建seo网站推广教程
  • 长春做网站的公司男生怎么找的小资源