我们已展现的唤醒进程的样子比内核中真正发生的要简单. 当进程被唤醒时产生的真正动 作是被位于等待队列入口项的一个函数控制的. 缺省的唤醒函数[22]22设置进程为可运行的 状态, 并且可能地进行一个上下文切换到有更高优先级进程. 设备驱动应当从不需要提供 一个不同的唤醒函数; 如果你例外, 关于如何做的信息见 <linux/wait.h>

我们尚未看到所有的 wake_up 变体. 大部分驱动编写者从不需要其他的, 但是, 为完整 起见, 这里是整个集合:

wake_up(wait_queue_head_t *queue); wake_up_interruptible(wait_queue_head_t *queue);

wake_up 唤醒队列中的每个不是在互斥等待中的进程, 并且就只一个互斥等待者, 如果它存在. wake_up_interruptible 同样, 除了它跳过处于不可中断睡眠的进程. 这些函数, 在返回之前, 使一个或多个进程被唤醒来被调度(尽管如果它们被从一 个原子上下文调用, 这就不会发生).

wake_up_nr(wait_queue_head_t *queue, int nr); wake_up_interruptible_nr(wait_queue_head_t *queue, int nr);

这些函数类似 wake_up, 除了它们能够唤醒多达 nr 个互斥等待者, 而不只是一个. 注意传递 0 被解释为请求所有的互斥等待者都被唤醒, 而不是一个没有.

wake_up_all(wait_queue_head_t *queue); wake_up_interruptible_all(wait_queue_head_t *queue);

这种 wake_up 唤醒所有的进程, 不管它们是否进行互斥等待(尽管可中断的类型仍 然跳过在做不可中断等待的进程)

wake_up_interruptible_sync(wait_queue_head_t *queue);

正常地, 一个被唤醒的进程可能抢占当前进程, 并且在 wake_up 返回之前被调度 到处理器. 换句话说, 调用 wake_up 可能不是原子的. 如果调用 wake_up 的进程 运行在原子上下文(它可能持有一个自旋锁, 例如, 或者是一个中断处理), 这个重 调度不会发生. 正常地, 那个保护是足够的. 但是, 如果你需要明确要求不要被调 度出处理器在那时, 你可以使用 wake_up_interruptible 的"同步"变体. 这个函 数最常用在当调用者要无论如何重新调度, 并且它会更有效的来首先简单地完成剩 下的任何小的工作.

如果上面的全部内容在第一次阅读时没有完全清楚, 不必担心. 很少请求会需要调用 wake_up_interruptible 之外的.

最新文章

  1. 分享一个php的启动关闭脚本(原)
  2. http://my.oschina.net/u/2007041/blog/508520
  3. 转:一些MongoDB限制
  4. Oracle的汉字转拼音首字母的函数
  5. Java多线程之进程和线程
  6. jsp Ajax请求(返回json数据类型)
  7. Stem Cell 华人科学家
  8. python正则表达式--flag修饰符、match对象属性
  9. [HackerRank]New Year Chaos[UNDONE]
  10. Java程序设计(第二版)复习 第三章
  11. 分布式事务之深入理解什么是2PC、3PC及TCC协议?
  12. mysql查询同一个字段下,不同内容的语句
  13. redis踩坑记录
  14. 题解-PKUWC2018 随机游走
  15. Codeforces Round #412 B. T-Shirt Hunt
  16. 在springboot中 使用jsp
  17. eclipse + maven + org.glassfish.jersey 创建 webapi
  18. 配置SpringMvc + maven 数据源!(四)
  19. Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
  20. Hive编程指南

热门文章

  1. centos6.5后台进程的切换
  2. 【JZOJ4861】【NOIP2016提高A组集训第7场11.4】推冰块
  3. 源码篇:MBProgressHUD
  4. C++返回值优化
  5. Libevent:6辅助函数以及类型
  6. 从零学React Native之11 TextInput
  7. Launch configuration JUnitCore references non-existing project XXX.
  8. 2019-10-22-win7-无法启动-WPF-程序-D3Dcompiler_47.dll-丢失
  9. 重磅开源|AOP for Flutter开发利器——AspectD
  10. @codeforces - 1153F@ Serval and Bonus Problem