Linux阻塞和同步机制
Linux阻塞和同步机制
阻塞和非阻塞
- 阻塞和非阻塞是设备访问的两种基本方式。使用这两种方式,驱动程序可以灵活地支持阻塞与非阻塞的访问。
- 阻塞调用是指调用结果返回之前,当前线程被挂起。函数只有在得到结果之后才会返回。
- 阻塞调用 不等同与 同步调用
对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。 - 非阻塞,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
- 对于阻塞对象可以有非阻塞的调用方式,在适当的时候调用阻塞函数,就可以避免阻塞。 对于非阻塞对象,调用特殊的函数也可以进入阻塞调用。
等待队列
等待队列
- 在写阻塞与非阻塞的驱动程序时,经常会用到等待队列。
- 阻塞调用会将当前线程挂起,而等待队列会将等待的线程暂时休眠,当等待的信号到来时,便会唤醒等待队列中进程继续执行。
- 在内核中,等待队列是有很多用处的,尤其是在中断处理,进程同步,定时等场合。可以使用等待队列实现阻塞进程的唤醒。它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制,同步对系统资源的访问等。
等待队列:struct __wait_queue_head {spinlock_t lock;struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
1.lock自旋锁
主要是用来对task_list链表起保护作用。当要向task_list链表中加入或者删除元素时,内核内部就会锁定lock锁,当修改完成后,会释放lock锁。也就是说,lock自旋锁在对task_list操作过程中,实现了对等待队列的互斥访问。
2.task_list变量
task_list是一个双向循环链表,用来存放等待的进程。
Linux阻塞和同步机制相关推荐
- 哪些是Linux内核的同步机制,Linux内核的同步机制(1)
Linux内核的同步机制(1) yanqin | 2009-04-16 14:51:09 阅读:791 发布文章 一. 引言 %A %A 在现代操作系统里,同一时间可能有多个内核执行流在执行,因 ...
- Linux 内核的同步机制,第 2 部分(来自IBM)
六.大内核锁(BKL--Big Kernel Lock) 大内核锁本质上也是自旋锁,但是它又不同于自旋锁,自旋锁是不可以递归获得锁的,因为那样会导致死锁.但大内核锁可以递归获得锁.大内核锁用于保护整个 ...
- 面试常用:Linux内核级同步机制--futex
前言:在面试中关于多线程同步问题中,我们知道glibc的 pthread_cond_timedwait 底层是用linux futex机制实现的.理想的同步机制应该是没有锁冲突时在用户态利用原子指令就 ...
- Linux中的同步机制
1.背景 编写内核代码或驱动代码时需要留意共享资源的保护,防止共享资源被并发访问.所谓并发访问,就是指多个内核路径同时访问和操作相同地址的数据,有可能发生相互覆盖共享数据的情况,造成被访问数据的不一致 ...
- Linux 内核的同步机制,第 1 部分(来自IBM)
一. 引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问.尤其是在多处理器系统上,更需要一些同步机制来同步 ...
- Linux内核的同步机制
本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...
- 高手进阶必读:Linux内核的同步机制
本文详细的介绍了 Linux 内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代 操作系统 里,同一时间可能有多个内核执行流在执行,因此内核其实 ...
- Linux内核的同步机制---自旋锁
自旋锁的思考:http://bbs.chinaunix.net/thread-2333160-1-1.html 近期在看宋宝华的<设备驱动开发具体解释>第二版.看到自旋锁的部分,有些疑惑. ...
- Linux futex 快速同步互斥机制简介
Futex,Fast Userspace muTEXes,作为linux下的一种快速同步(互斥)机制,已经存在了很长一段时间了(since linux 2.5.7).它有什么优势?又提供了怎样一些功能 ...
最新文章
- 编译器设计-有限自动机
- 操纵神经元构造后门,腾讯朱雀实验室披露AI模型新型攻击手法
- 2.登录linun 输入密码登录不进去 进入单用户模式 修改 然后reboot
- (006) java后台开发之基本数据类型
- 您能看出这个Double Check里的问题吗?
- P4590-[TJOI2018]游园会【dp套dp】
- html绑定带有形参的函数,C++中函数
- C/C++——一个因为unsigned引发的大问题
- opengl编程指南
- H3C-云计算技术专题培训(分享六)
- android极光推送tag,Android极光推送设置别名和标签
- 【数据可视化应用】实现空间栅格(附R语言代码)
- 2008年8月6号,晴,今天天气已经变热了。少壮不努力,老大徒悲伤。 —— 汉乐府古辞《长歌行》
- eclipse wifi 连接手机
- android隐私违规获取问题处理 及 Hook拦截处理记录 (VirtualXposted/epic等)及 android/iOS 多bundle加载方式修复方案
- 互动云渲染——云原生渲染的初步探索
- xstream操作xml
- 环境配置:前端程序员快速进行开发
- 计算机事件查看u盘使用情况,关于U盘使用记录的日志文件
- Texstudio 英文拼写检查功能出问题的解决方法
热门文章
- SpringBoot项目集成Mybatis Plus(三)分页插件
- Java 算法训练 一元三次方程求解
- STM32F405 HAL库 STM32CUBE开发
- html如何在网页上看错误,HTML错误时,Spring MVC的,但不能查看网页时,静态
- arduino怎么和C语言程序通信,c – 如何将arduino库与标准C代码一起使用
- R语言快速学习第二部分(有其他语言基础)
- 耦合式是什么意思_定向耦合器是如何工作的?能怎样应用?看完就全明白了
- 红帽linux免费吗,红帽宣布面向16个系统以下的小型生产环境免费提供RHEL
- linux识别科学计数法,Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]...
- ueditor chrome bug