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

北京网站建设电话wordpress id从1开始

北京网站建设电话,wordpress id从1开始,房地产市场最新动态,上海3d建模培训学校在前面呢,我们已经讲过了自旋锁以及信号量了,那么今天呢,我们来看看互斥量: 互斥量mutex的实现: mutex的内核结构体: 初始化mutex之后,就可以使用mutex_lock函数或其他衍生版本来获取信号量&a…

在前面呢,我们已经讲过了自旋锁以及信号量了,那么今天呢,我们来看看互斥量:

互斥量mutex的实现:

mutex的内核结构体:

初始化mutex之后,就可以使用mutex_lock函数或其他衍生版本来获取信号量,使用mutex_unlock函数释放信号量。我们只分析mutex_lock、mutex_unlock函数的实现。

这里要堪误一下:前面我们说mutex中的owner是用来记录获得mutex的进程,以后必须由它来释放mutex。这是错的!

从上面的代码可知,owner并不一定存在!

owner有2个用途:debug(CONFIG_DEBUG_MUTEXES)或spin_on_owner(CONFIG_MUTEX_SPIN_ON_OWNER)。

什么叫spin on owner?

我们使用mutex的目的一般是用来保护一小段代码,这段代码运行的时间很快。这意味着一个获得mutex的进程,可能很快就会释放掉mutex。

针对这点可以进行优化,特别是当前获得mutex的进程是在别的CPU上运行、并且“”是唯一等待这个mutex的进程。在这种情况下,那“”就原地spin等待吧:懒得去休眠了,休眠又唤醒就太慢了。

所以,mutex是做了特殊的优化,比semaphore效率更高。但是在代码上,并没有要求“谁获得mutex,就必须由谁释放mutex”,只是在使用惯例上是“谁获得mutex,就必须由谁释放mutex”。

下面的话,我们来看看内核给mutex提供的函数:

mutex_lock函数的实现:

fastpath:

mutex的设计非常精巧,比semaphore复杂,但是更高效。

首先要知道mutex的操作函数中有fastpath、slowpath两条路径(快速、慢速):如果fastpath成功,就不必使用slowpath。

怎么理解?

这需要把metex中的count值再扩展一下,之前说它只有1、0两个取值,1表示unlocked,0表示locked,还有一类值“负数”表示“locked,并且可能有其他程序在等待”。

代码如下:

先看看fastpath的函数:__mutex_fastpath_lock,这个函数在下面2个文件中都有定义:

所以,对于ARMv6以下的架构,使用include/asm-generic/mutex-xchg.h中的__mutex_fastpath_lock函数;对于ARMv6及以上的架构,使用include/asm-generic/mutex-dec.h中的__mutex_fastpath_lock函数。这2个文件中的__mutex_fastpath_lock函数是类似的,mutex-dec.h中的代码如下:

大部分情况下,mutex当前值都是1,所以通过fastpath函数可以非常快速地获得mutex。

slowpath:

如果mutex当前值是0或负数,则需要调用__mutex_lock_slowpath慢慢处理:可能会休眠等待。

① 分析第一段代码:

② 分析第二段代码:

③ 分析第三段代码:

这个wait_list是FIFO(Firt In Firs Out),谁先排队,谁就可以先得到mutex。

④ 分析第四段代码:for循环,这是重点

⑤ 分析第五段代码:收尾工作

mutex_unlock函数的实现:

mutex_unlock函数中也有fastpath、slowpath两条路径(快速、慢速):如果fastpath成功,就不必使用slowpath。

代码如下:

fastpath:

所以,对于ARMv6以下的架构,使用include/asm-generic/mutex-xchg.h中的__mutex_fastpath_lock函数;对于ARMv6及以上的架构,使用include/asm-generic/mutex-dec.h中的__mutex_fastpath_lock函数。这2个文件中的__mutex_fastpath_lock函数是类似的,mutex-dec.h中的代码如下:

大部分情况下,加1后mutex的值都是1,表示无人等待mutex,所以通过fastpath函数直接增加mutex的count值为1就可以了。

如果mutex的值加1后还是小于等于0,就表示有人在等待mutex,需要去wait_list把它取出唤醒,这需要用到slowpath的函数:__mutex_unlock_slowpath。

slowpath:

如果mutex当前值是0或负数,则需要调用__mutex_unlock_slowpath慢慢处理:需要唤醒其他进程。

__mutex_unlock_common_slowpath函数代码如下,主要工作就是从wait_list中取出并唤醒第1个进程:

那么到这里,我们互斥量就讲完啦,完结,撒花(doge.)


文章转载自:

http://HFg5HAbt.hjwkq.cn
http://ildpeFhQ.hjwkq.cn
http://faY4EkOb.hjwkq.cn
http://4kDtGzIB.hjwkq.cn
http://djhYkWX8.hjwkq.cn
http://2DedSb8q.hjwkq.cn
http://3bWQP1Qi.hjwkq.cn
http://zeHDiKPC.hjwkq.cn
http://q0CnVKiA.hjwkq.cn
http://ah9vHQ0s.hjwkq.cn
http://WNYuJSeo.hjwkq.cn
http://vCvcj6AZ.hjwkq.cn
http://Xl21fV5I.hjwkq.cn
http://X8nsRGFZ.hjwkq.cn
http://0hPTJEKa.hjwkq.cn
http://fRngghbR.hjwkq.cn
http://LDKb8eAS.hjwkq.cn
http://h9UkynPT.hjwkq.cn
http://XzEEy8xA.hjwkq.cn
http://Lc9kuqvh.hjwkq.cn
http://XkQ1vNYj.hjwkq.cn
http://XHf7nPQr.hjwkq.cn
http://ch6Vht38.hjwkq.cn
http://eDljz5hH.hjwkq.cn
http://AYAX9Cuo.hjwkq.cn
http://3XdjLtGh.hjwkq.cn
http://cBa7RO3b.hjwkq.cn
http://NBVi7XLQ.hjwkq.cn
http://eQuyZYep.hjwkq.cn
http://ggv4TdpE.hjwkq.cn
http://www.dtcms.com/wzjs/768357.html

相关文章:

  • 投资网站建设公司多少钱手机版的网站怎样做呢
  • 免费看电视剧网站2020wordpress支持tif格式吗
  • 国际转运网站建设清远专业网站建设服务
  • 在民办医院做网站编辑怎么样青岛哪家做网站的公司好
  • 优化网站哪家好WordPress版本更新提醒
  • 四川建设工程网上合同备案网站智慧团建初始密码
  • 网站建设咨询客户话术网站主题风格
  • 网站流量一直做不起来ui网页设计报价
  • 用什么做网站更快捷方便企业标识设计
  • 古镇做灯饰网站的公司上海建设银行网站转账记录吗
  • 济南网站制作平台买购网十大品牌官网
  • 制作卖东西网站织梦cms网站地图
  • crm系统有哪些品牌一个网站如何优化
  • 网站建设学什么语言编辑好四川网站建设yijia028
  • 网站开发 图形验证码wordpress托管平台
  • 建设网站需要花费多少钱沈阳思路网站制作
  • 涟源网站设计seo网站概述
  • 苏州网站建设布局app定制开发商城
  • wordpress网站访问量网站提交收录软件
  • 找企业做网站seo网站案例
  • 怎么用二维动画做网站首页步骤官网查询入口
  • 网站模板有哪些内容外贸展示型网站建设
  • 网站配置怎么牛栏前网站建设
  • 网站开发app开发培训wordpress购买会员资格
  • 湖北响应式网站制作重庆网站建设 最便宜
  • 苏州网站定制山东建设监理协会官方网站
  • 科技公司网站设计方案建筑方案设计案例
  • 营销网站的建设与管理包括哪些事项河南省住房城乡建设厅
  • 网站漂浮物怎么做网站制作后台怎么做
  • 杭州做外贸网站舆情优化公司