首页
社区
课程
招聘
[讨论]关于自旋锁的问题
发表于: 2014-6-6 08:57 3819

[讨论]关于自旋锁的问题

2014-6-6 08:57
3819
看自旋锁有些疑问
1、在单cpu上,是不是raise irql到dispatch 就可以实现自旋锁的效果了?
2、在多cpu上,才有自旋等待的概念?
3、自旋锁的实质就是电脑只做一件事(先不考虑硬件中断)?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 8188
活跃值: (2857)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
mj说,别人都不和你旋,你自己旋个头啊。。
2014-6-6 09:05
0
雪    币: 0
活跃值: (756)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
请楼主问问题之前先baidu、google、bing一下

1-2:来自百度百科(自旋锁)
自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。

3:
锁 首先是为了抢夺资源、抢到某锁等于抢到使用资源

抢不到锁的时候就要等待、等待也有不同的方式:
比如像等待分发对象、就是让等待者被动的接收完成通知
自旋锁则是不断地主动的去询问完成状态。

具体你自己看看《Windows内核情景分析》 和 WRK源码就好了
2014-6-6 09:50
0
雪    币: 2161
活跃值: (750)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
1.是
2.是
3.是

首先,自旋锁会提高IRQL,防止被中断(包括线程切换),即一直占有CPU
然后访问锁,如果锁已经被锁定(即其他CPU在占用锁),则一直等待,直到锁被释放
---
概括来说自旋锁的出现是为了解决多核CPU(多线程)访问临界区的一种手段,保证操作的原子性。
2014-6-6 10:10
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢大家,我在网上查了不少,但很多说法含糊不清,甚至错误,所以让我有点迷惑,才来问的。
关键是这一点,我明白了:其他同步控制,是等待那个同步对象的线程才阻塞,而自旋锁是其他的线程全部停来下了,本cpu的其他线程不会运行,其他cpu的线程不断自旋中。
2014-6-6 11:14
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
自旋锁提升到DpcLevel,可以中断吧,最后只是不会线程调度。
2014-6-6 11:26
0
游客
登录 | 注册 方可回帖
返回
//