Linux驱动设计——阻塞和同步

阻塞和非阻塞是设备访问的两种基本方式,阻塞和非阻塞驱动程序使用时,经常会用到等待队列。

阻塞和非阻塞

阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有得到结果之后才会返回。而对于同步调用来说,许多时候当前线程还是激活的,只是逻辑上当前函数没有返回而已。

非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

完整实例程序分析

 

等待队列

等待队列机制使等待的进程暂时睡眠,当等待的信号到来时,便唤醒等待队列中进程继续执行。

等待队列的基本数据结构是一个双向链表,这个链表可以存储睡眠的进程。等待队列也与进程调度机制紧密结合,能够实现内核中异步事件通知机制。

等待队列在中断处理、进程同步、定时等场合有重要的用处。

等待队列的实现

 

等待队列的使用

  1. 定义和初始化等待队列头
  2. 定义等待队列
  3. 添加和移除等待队列
  4. 等待事件
  5. 唤醒等待队列

 

使用等待队列实现同步机制

 

 

To be continue...

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。