poll_wait阻塞/唤醒
1. 应用阻塞 
应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上
#include <linux/poll.h>
static inline void poll_wait (struct file *filp, wait_queue_head_t *wait_address, poll_table *P);filp:设备文件信息的 struct file 结构体的指针参数 struct file *filp  
P:追加到设备驱动上的 poll_table结构体指针参数
2. 内核等待事件
/*
*    conditon:必须满足,否则阻塞
*    timeout和conditon相比,有更高优先级
*/
wait_event(wq, condition);
wait_event_timeout(wq, condition, timeout);
wait_event_interruptible(wq, condition) ;
wait_event_interruptible_timeout(wq, condition, timeout) ;3. 唤醒等待队列
//可唤醒处于TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE状态的进程
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)
//只能唤醒处于TASK_INTERRUPTIBLE状态的进程
#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)4. schedule_timeout  
表示的进程睡眠直到时间超时,函数就会立即返回
5. 信号 
TASK_INTERRUPTIBLE是可以被信号和wake_up()唤醒的,当信号到来时,进程会被设置为可运行 
TASK_UNINTERRUPTIBLE只能被wake_up()唤醒
信号来源: 
硬件来源:(比如我们按下了键盘或者其它硬件故障) 
软件来源:最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作
poll_wait阻塞/唤醒的更多相关文章
- AQS阻塞唤醒工具LockSupport
		LockSupport在JDK源码中描述为:构建锁和其他同步类的基本线程阻塞原语,构建更高级别的同步工具集.LockSupport提供的park/unpark从线程的粒度上进行阻塞和唤醒,park/u ... 
- java线程阻塞唤醒的四种方式
		java在多线程情况下,经常会使用到线程的阻塞与唤醒,这里就为大家简单介绍一下以下几种阻塞/唤醒方式与区别,不做详细的介绍与代码分析 suspend与resume Java废弃 suspend() 去 ... 
- 如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)
		以下为线程 阻塞/唤醒 主要代码 public class MyThread extends Thread { //无意义 private final Object lock = new Objec ... 
- 多线程之Java线程阻塞与唤醒
		线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java ... 
- Java并发框架——AQS之阻塞与唤醒
		根据前面的线程阻塞与唤醒小节知道,目前在Java语言层面能实现阻塞唤醒的方式一共有三种:suspend与resume组合.wait与notify组合.park与unpark组合.其中suspend与r ... 
- 从JDK源码角度看线程的阻塞和唤醒
		目前在Java语言层面能实现阻塞唤醒的方式一共有三种:suspend与resume组合.wait与notify组合.park与unpark组合.其中suspend与resume因为存在无法解决的竟态问 ... 
- 阻塞和唤醒线程——LockSupport功能简介及原理浅析
		目录 1.LockSupport功能简介 1.1 使用wait,notify阻塞唤醒线程 1.2 使用LockSupport阻塞唤醒线程 2. LockSupport的其他特色 2.1 可以先唤醒线程 ... 
- Java 中你怎样唤醒一个阻塞的线程?
		在 Java 发展史上曾经使用 suspend().resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题. 解决方案可以使用以对象为目标的阻塞,即利用 Object ... 
- Java并发框架——AQS阻塞队列管理(三)——CLH锁改造
		在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能.比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点 ... 
随机推荐
- (转) centos7 RPM包之rpm命令
			原文:https://blog.csdn.net/capecape/article/details/78529159 RPM包与源码包的区别1.软件包分类 源码包:C源代码包 rpm包:编译之后的二进 ... 
- Intelij idea 中文字体渲染异常解决方法
			当 Font 选择的字体无法渲染时,则尝试使用该选项所选择的字体渲染. 
- aps.net StateServer设置
			1.在 system.web节点 加 <sessionState mode="StateServer" stateConnectionString="tcpip=1 ... 
- Python Linux系统管理与自动化运维
			Python Linux系统管理与自动化运维 前言 第1章Python语言与Linux系统管理1 1.1Python语言有多流行1 1.2Python语言为什么流行3 1.3Python语言有什么缺点 ... 
- Archer代码生成器前端
			import {getList, getDetail, add, update, remove} from "@/api/sales/sales"; import {getList ... 
- eclipse Maven Dependencies pom
			<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ... 
- shell脚本检查是否存在tun0虚拟网卡,若不不存在服务器更改port,并重启服务器,客户端修改port,并重新启动客户端
			openvp 客户端 /home 目录下各脚本文件名 [root@jira home]# ls openvpn_server_restart.sh openvpn_tunnel_monitor.sh ... 
- Modelsim SE-64 10.4的安装 、破解以及远程使用
			1.准备好modelsim SE-64 10.4的安装包和破解文件(modelsim-win64-10.4-se.exe 和MentorKG.exe ,patch_dll.bat). 2.安装 好 ... 
- hbase 操作
			视频随笔视频地址:hbase教程 1.与传统关系型数据库的区别 hbase 传统分布式 单机列动态增减 建表时候指定只有字符串一种数据类型 数值,字符空值不被存储 存储不支持SQL 查 ... 
- javascript异步上传压缩图片并立即显示图片
			javascript异步上传压缩图片并立即显示图片<pre><!doctype html><html><head><meta charset=&q ... 
