01 自旋锁

1、不同版本的内核文件
单核:
ntkrnlpa.exe 2-9-9-12分页
ntoskrnl.exe 10-10-12分页
多核:
ntkrnlpa.exe 2-9-9-12分页
ntoskrnl.exe 10-10-12分页
单核跟多核中的相同名的文件里面的代码不一样

2、Windows自旋锁
参考:KeAcquireSpinLockAtDpcLevel
只要包含SpinLock都是和自旋锁相关的API
关键代码:

 lock bts qword ptr [rcx], 0 //如果lock bts qword ptr [rcx], 1 则是将第1位置1

lock是锁前缀,保证这条指令在同一时刻,只能有一个CPU访问
bts指令:设置并检测, 将rcx指向的数据的第0位置1,如果 [rcx]的值等于0,那么CF = 1,否则CF = 0
自旋锁由来因为 pause指令

3、总结:
<1>自旋锁只对多核有意义
<2>自选所与临界区一样、事件、互斥体一样,都是一种同步机制,都可以让当前线程处于等待状态,区别在于自旋锁不用切换线程

猜你喜欢

转载自blog.csdn.net/lifeshave/article/details/87826242