介绍一下Linux内核的排队自旋锁


Posted in 面试题 onAugust 27, 2014
排队自旋锁(FIFO Ticket Spinlock)是 Linux 内核 2.6.25 版本引入的一种新型自旋锁,它通过保存执行线程申请锁的顺序信息解决了传统自旋锁的“不公平”问题。排队自旋锁的代码由 Linux 内核开发者 Nick Piggin 实现,目前只针对 x86 体系结构(包括 IA32 和 x86_64),相信很快就会被移植到其它平台。

自旋锁(Spinlock)是在Linux 内核中广泛运用的底层同步机制。它是一种工作于多处理器环境的特殊的锁,在单处理环境中自旋锁的操作被替换为空操作。当某个处理器上的内核执行线程申请自旋锁时,如果锁可用,则获得锁,然后执行临界区操作,最后释放锁;如果锁已被占用,线程并不会转入睡眠状态,而是忙等待该锁,一旦锁被释放,则第一个感知此信息的线程将获得锁。

传统的自旋锁本质上用一个整数来表示,值为1代表锁未被占用。这种无序竞争导致执行线程无法保证何时能取到锁,某些线程可能需要等待很长时间。随着计算机处理器个数的不断增长,这种“不公平”问题将会日益严重。

Tags in this post...

面试题 相关文章推荐
同步和异步有何异同,在什么情况下分别使用他们?举例说明
Feb 27 面试题
华为慧通面试题
Sep 11 面试题
将"引用"作为函数参数有哪些特点
Apr 05 面试题
写一个在SQL Server创建表的SQL语句
Mar 10 面试题
.NET面试问题集
Dec 08 面试题
武汉瑞得软件笔试题
Oct 27 面试题
下列程序在32位linux或unix中的结果是什么
Jan 26 面试题
中科软笔试题和面试题
Oct 07 面试题
百度软件工程师职位
Feb 14 面试题
请写出一段Python代码实现删除一个list里面的重复元素
Dec 29 面试题
JAVA程序设计笔试题面试题一套
Jul 28 面试题
Servlet如何得到客户端机器的信息
Oct 17 面试题
Windows和Linux动态库应用异同
Jul 28 #面试题
linux面试题参考答案(9)
Jan 29 #面试题
linux面试题参考答案(8)
Aug 11 #面试题
linux面试题参考答案(7)
Jul 24 #面试题
linux面试题参考答案(6)
Aug 29 #面试题
linux面试题参考答案(5)
Sep 01 #面试题
linux面试题参考答案(4)
Jan 28 #面试题
You might like
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
详解python和matlab的优势与区别
2019/06/28 Python
Python文件操作方法详解
2020/02/09 Python
Python中if有多个条件处理方法
2020/02/26 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
如何提高JDBC的性能
2013/04/30 面试题
依法行政工作汇报
2014/10/28 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
博士生专家推荐信
2015/03/25 职场文书
八年级物理教学反思
2016/02/19 职场文书
600字作文之感受大自然
2019/11/27 职场文书
MySQL基础(一)
2021/04/05 MySQL
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
nginx搭建NFS网络文件系统
2022/04/14 Servers