作家
登录

设置Linux进程的睡眠和唤醒

作者: 来源: 2017-08-02 16:54:05 阅读 我要评论

下面让我们用linux 内核中的实例来看看Linux 内核是若何避免无效睡眠的,这段代码出自Linux2.6的内核(linux-2.6.11/kernel/sched.c: 4254):

  1. /* Wait for kthread_stop */ 
  2.  
  3. set_current_state(TASK_INTERRUPTIBLE); 
  4.  
  5. while (!kthread_should_stop()) { 
  6.  
  7. schedule(); 
  8.  
  9. set_current_state(TASK_INTERRUPTIBLE); 
  10.  
  11.  
  12. __set_current_state(TASK_RUNNING); 
  13.  
  14. return 0;  

膳绫擎的┞封些代码属于迁徙办事线程migration_thread,这个线程赓续地检查kthread_should_stop(),

直 到kthread_should_stop()返回1它才可以退出轮回,也就是说只要kthread_should_stop()返回0该过程就会一向睡 眠。大年夜代码中我们可以看出,检查kthread_should_stop()确切是在过程的状况被置为TASK_INTERRUPTIBLE后才开端履行 的。是以,如不雅在前提检查之后然则在schedule()之前有其他过程试图唤醒它,那么该过程的唤醒操作不会掉效。

总结

经由过程膳绫擎的评论辩论,可以发明在Linux 中避免过程的无效唤醒的关键是在过程检查前提之前就将过程的

状况置为TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE,并且如不雅检查的前提知足的话就应当

将其状况从新设置为TASK_RUNNING。如许无论过程等待的前提是否知足, 过程都不会因为被移出就绪队列而缺点地进入睡眠状况,大年夜而避免了无效唤醒问题。

【编辑推荐】

  1. 玩转Linux,哪些技能会是您的必备之选?
  2. Linux内核驱动中对文件的读写
  3. 在Linux Mint安装Linux Kernel 4.12(稳定版)
  4. LKU:一套在Ubuntu/LinuxMint上编译、安装和更新最新内核的Shell脚本
  5. 应用Kdump检查Linux内核崩溃
【义务编辑:枯木 TEL:(010)68476606】

  推荐阅读

  NoSQL: 如何在Ubuntu 16.04上安装OrientDB

启动 OrientDB 并使其开机自启动:解释 - 非关系型数据库(NoSQL)和 OrientDB平日在我们说起数据库的时刻,想到的昵嘟个重要的分类:应用用于用户和应用法度榜样之间进行对接的一种被称为构>>>详细阅读


本文标题:设置Linux进程的睡眠和唤醒

地址:http://www.17bianji.com/lsqh/36520.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)