免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: skyrim

[内核同步] 感觉wait_event这里还是会有race condition [复制链接]

论坛徽章:
0
发表于 2012-05-22 10:10 |显示全部楼层
回复 10# 灌水菜鸟


    其实他是引述Robert Love的话,E文才是他的母语吧

论坛徽章:
0
发表于 2012-05-22 10:10 |显示全部楼层
回复 9# 怪怪虎


    不是不会被抢占,而是被抢占之后还能切换回来。
   内核抢占的代码是preempt_schedule_irq可以看到在调用__schedule之前增加了PREEMPT_ACTIVE计数,
   再看下__schedule代码,里面检测到PREEMPT_ACTIVE时不会执行deactivate_task
   so, 即使被抢占,仍然在rq上面

论坛徽章:
0
发表于 2012-05-22 10:13 |显示全部楼层
wayling 发表于 2012-05-22 10:10
回复 10# 灌水菜鸟


我说的对象是这个论坛里的人,而不是那作者。

论坛徽章:
0
发表于 2012-05-22 12:40 |显示全部楼层
本帖最后由 honkiko 于 2012-05-22 12:42 编辑

回复 12# skyrim

总结一下,应该是这样的: set_current_state(TASK_INTERRUPTABLE), 然后主动调schedule(), 会从rq里被删掉。
但如果不是主动调schedule(), 而是被抢占,也就是preempt_schedule()和preempt_schedule_irq(),则仍然留在rq里面。 后两个函数的调用时机好像有三个:preempt_enable, local_bh_enable, 中断返回。

被抢占的话,进程可能还没来得及加入等待队列,如果从rq移除的话,就再也没有机会进入rq了。
如果是自己主动调schedule, 那自己得保证已经加入了等待队列,或者有别的机制来唤醒它。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP