阅读:2780回复:6
什么是spin lock ,interlock
在wdm中大量使用kexxxxspinlock,谁能讲讲什么是spinlock?什么是interlock?
|
|
沙发#
发布于:2001-10-19 09:17
spinlock ,就是自旋锁,用在多CPU时,CPU之间的同步。
获得一个spinlock的代码如下, while( testandset( spinlock,LOCKED)! = UNLOCKED ) ; 或者用 exchange之类的指令来代替testandset, 用带LOCK前缀的指令来锁定总线; 释放的代码是: spinlock=UNLOCKED; interlock,用于多CPU时线程之间的同步;interlock之类的函数 利用CPU提供的原子操作,执行一种功能. 如 interlockedexchange. 这些功能要同时对一个操作数进行读和写。 在NT系统中spinlock 可以这样实现: acquire: KeRaiseIRQL (IRQL_DPCL); // 防止线程切换 while( Interlocked_Set_SPInlock_And_Get_Old_VALUE ( SPINLOCK, LOCKED) !=UNLOCKED ) KeLowerIRQL release: spinlock=UNLOCKED; |
|
板凳#
发布于:2001-10-20 11:10
谢谢PPL!那么这两个LOCK,锁住的是总线了。锁的意思是不是只有当前的线程可以使用总线,其他线程等待,对其它进程呢?
还有,什么是原子操作? |
|
地板#
发布于:2001-10-24 10:27
首先,我认为并非锁住的是总线。spin lock是用来保护一些临界资源的。
其次,那些拥有了spin lock的线程,可以被那些运行在更高的IRQL上的线程所中断,当被中断时,当前线程势必释放spin lock。 然后,所谓原子操作,我认为就是一些功能的汇编指令。比如,典型的,需要一个原子的test-and-set指令去申请或释放spin lock。 |
|
|
地下室#
发布于:2001-10-24 10:58
jm_tang你有没有读过操作系统的书,里面将原子操作很清楚,原子操作就是不能再运行期间被中断(线程、进程切换)的一段代码,也就是说,要么一次全部运行,要么就不一条也不运行
|
|
5楼#
发布于:2001-10-25 20:12
谢谢各位!
我半路出家,没有读过操作系统的书。 以前写过简单的VXD,现在看WDM,真是麻烦。 |
|
6楼#
发布于:2001-10-26 08:26
老兄:光谢谢有什么用?给人家分呀!
|
|
|