什么是自旋锁?
自旋锁就是一种防止多线程操作同一资源不安全行为的保护机制,在上锁到解锁会经历中断级别的提升与降低,最后总结一句话就是一次只能有一个线程进入临界区
自旋锁从上锁到解锁的时间越短,那么他的存在意义便更大,因为自旋锁会屏蔽中断,所有的其他线程都处于一个盲等的状态
注意:只有所有的线程都使用一个锁,那么这个锁才有意义,如果在堆中(局部变量)中初始化一个锁,那每次调用这个线程都会初始化一个锁就没有意义了
#include <ntddk.h>#define MEM_TAG 10111//此案例中用了单线程来模拟,所以可能会使得效果自旋锁的效果不佳,但是只要懂了原理就可以了ULONG test = 0;//定义自旋锁KSPIN_LOCK mylock;//创建中断级保存对象KIRQL kIral;VOID UnloadDriver(PDRIVER_OBJECT pDriver){ DbgPrint("卸载成功\n");}VOID KSLOCK(){ //初始化自旋锁 KeInitializeSpinLock(&mylock); //开启自旋锁 KeAcquireSpinLock(&mylock, &kIral); test = 99; DbgPrint("此时的test只能由我来操作"); //关闭自旋锁并且恢复中断级 KeReleaseSpinLock(&mylock, kIral);}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegpath){ KSLOCK(); pDriver->DriverUnload = UnloadDriver; return STATUS_SUCCESS;}