链表之类的结构总是涉及多线程,这时候就要用到使用锁。
当然在处理临界区的时候,这个是必须要考虑的呀。
在驱动开发的代码中,大多是在于多线程执行环境的。
下面将介绍使用简单的自旋锁。
如下的代码将初始化一个自旋锁:
KSPIN_ my_Spin_Lock;
KeInitializeSpinLock(&my_Spin_Lock);
KeInitializeSpinLock 函数没有返回值。
在KeAccquireSpinLock 和 KeReleaseSpinLock 之间的代码是只有单线程执行的,其他的现成会停留在KeAccquireSpinLock 等候,直到KeReleaseSpinLock被调用。KIRQL是一个中断级。
void MySafeFunction()
{
KSPIN_LOCK my_spin_lock;
KIRQL irql;
KeInitialiezeSpinLock(&my_spin_lock);
KeAccquireSpinLock(&my_spin_lock, &irql);
//----do something
KeReleaseSpinLock(&my_spin_lo