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

增城微信网站建设易瑞通网站建设

增城微信网站建设,易瑞通网站建设,美容营销型网站,wordpress 文本 点不了今天实现操作系统互斥锁的时候遇到一个有趣的问题。 场景 有两个进程分别名为 taskA#xff0c;taskB#xff0c;采取时间片轮转的方式交替运行——也即维护了一个 ready_queue#xff0c;根据时钟中断来 FIFO 地调度任务。它们的任务是无限循环调用 sys_print() 来打印自…今天实现操作系统互斥锁的时候遇到一个有趣的问题。 场景 有两个进程分别名为 taskAtaskB采取时间片轮转的方式交替运行——也即维护了一个 ready_queue根据时钟中断来 FIFO 地调度任务。它们的任务是无限循环调用 sys_print() 来打印自己的名称。 我还设置了一个 mutex 互斥锁它包含一个 0/1 互斥信号量用于表示锁是否已经被取走还有一个等待队列 waiting_queue用于存放正在等待该锁的进程。 为了保证打印出来的字符不错乱我为 sys_print() 函数设置一个 mutex 对象我们暂且称之为 print_mutex。在调用 sys_print() 前执行 mutex_lock() 上锁如果此时锁已经被取走那么将当前任务加入 print_mutex 的 waiting_queue。调用 sys_print() 后执行 mutex_unlock() 解锁如果 waiting_queue 中有任务那么将 print_mutex 直接分配给其中的第一个任务同时将该任务加入进程的就绪队列否则将锁归还由需要该锁的进程主动来取锁。 运行 想一想这时候运行系统屏幕上的输出形式是怎么样的呢 容易想到一些情况 一、交替连续输出且无打印出错误形如以下形式 taskA taskA taskA taskB taskB taskB taskA taskA taskA ... ...二、交替连续输出但在进程切换的瞬间有打印错乱的可能形如以下形式 taskA taskA tastaskB taskB taskB ttaskA taskA taskA ... ...三、严格交替输出且无打印出错误形如以下形式 taskA taskB taskA taskB taskA taskB ... ...四、严格交替输出但在进程切换的瞬间有打印错乱的可能形如以下形式 tasktaskB tataskB taskA tataskA ... ...其实还有很多其他可能碍于篇幅受限不再列出。 输出 很容易想到加了互斥锁 print_mutex 后肯定不会出现打印错乱的情况因此情况二和情况四首先排除那么到底是情况一还是情况三呢大家可以根据场景先思考一下。 好了公布答案最终形式其实既不是情况一也不是情况三而是这样的 taskA taskA taskA taskA taskA taskB taskA taskB ... ...也就是一个任务先连续输出然后两个任务严格交替输出如下图 分析 假设先上时间片运行的是 taskA那么在第一个时间片周期中 taskA 可以调用 sys_print() 函数若干次当时间片发生切换的瞬间taskA 会被挂起然后重新加入到 ready_queue 尾部等待下一次被分配 cpu。 这个任务的功能很简单可以简化成以下形式 void taskA(){while(true){metux_lock(); //关中断保证原子操作sys_print();mutex_unlock(); //关中断保证原子操作} }其中 mutex_lock() 和 mutex_unlock() 都关中断保证了不会有时钟中断发生 所以在切换进程的时候taskA 可能会 停留在 metux_lock() 之前、mutex_unlock() 之后停留在 sys_print() 中 显然由于sys_print() 需要与外围设备端口交互包含的指令数也比较多而情况1 包含的指令数极少因此 taskA 此时绝大概率停留在 sys_print() 中也就是 taskA 持有 print_mutex 互斥锁并在 ready_queue 中等待执行而这时候 taskB 虽然被分配了时间片但在执行 mutex_lock() 的时候发现锁已被取走只能进入 print_mutex 的 waiting_queue 等待。taskA 重新上cpu 运行执行完上次执行一半的 sys_print() 之后紧接着执行 mutex_unlock() 将锁分配给锁等待队列中的 taskB下一轮循环时taskA 执行 mutex_lock() 发生锁等待被挂起循环往复两者就严格交替打印了。 事实上如果 taskA 在切换时间片的时候遇到的是情况 1那么也可能出现两个进程交替连续打印的情况但是这个概率极小。
http://www.laogonggong.com/news/135612.html

相关文章:

  • 可以翻外墙的浏览器开鲁网站seo转接
  • 彩票网站开发合法吗wordpress的插件下载
  • 南昌网站seo郑州发布官网
  • 做网站的去那里接单企业网站建站元素
  • 网站建设主体力量本科自考科目有哪些
  • 做网站官网北京网站建设网站
  • 工业设计参考网站福建龙岩发现1例阳性
  • 汕头制作网站软件科技打破垄断全球的霸权
  • 如何寻找seo网站建设客户赤峰专业的网站建设
  • mysql 网站登录密码企业名字查重系统
  • 吉林省交通建设质量监督站网站成都网站建设重庆最加科技
  • 网站建设应遵守的原则网站后台百度统计图如何做的
  • 备案时注意网站名称规范重庆南岸区网站建设
  • 网站排名优化公司推荐学做网站都要学什么专业
  • 培睿网站开发与设计世界科技与发展论坛
  • 网站权重分析景区网站设计
  • 有了代码如何建设网站台州网站搭建
  • 公司平台网站建设上海模板建站公司
  • 下载的网站模版怎么用汉口网站建设
  • 苏州网站建设机构WordPress 为分类加图片
  • 婚庆大气网站源码网站建设合同需要缴纳印花税
  • 专业网站排名优化seo推广任务小结
  • 广东网站建设人员做ppt卖给网站
  • 怎样用西瓜影音做网站网站建设 上海网站建设
  • 双语网站建设方案跳网站查询的二维码怎么做的
  • 网站转移权重做的好的办公家具网站
  • 哪里可以做公司网站wordpress举报插件
  • 创意餐厅网站建设文案书wordpress 微商城模板下载
  • 锡盟做网站建设网站的主要流程有哪些
  • 网站开发文档的示例关于建设校园网站申请报告