WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(三)——所涉及的Windows驱动基... 阅读

深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(2)

 2009-09-11 00:00:00 来源:WEB开发网   
核心提示:1.5.1 同步处理Windows是个多任务抢占式的操作系统,如果没有同步机制的控制,深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(2),所有的线程会任意运行,如果多个线程要求操作同一个资源,使用自旋锁前,首先对其初始化,这时就需要同步处理,如果驱动程序没有很好地处理同步问题

1.5.1        同步处理

Windows是个多任务抢占式的操作系统,如果没有同步机制的控制,所有的线程会任意运行。如果多个线程要求操作同一个资源,这时就需要同步处理。如果驱动程序没有很好地处理同步问题,程序会出错误、操作系统的性能下降、甚至出现死锁等现象。

1.5.1.1     自旋锁

自旋锁是一种同步处理机制,它能保证某个资源只能被一个线程所拥有,可用于驱动程序的同步处理。自旋锁的作用一般是使各派遣函数之间同步。

初始化的自旋锁处于解锁状态,这时它可以被程序“获取”。“获取”后的自旋锁处于锁住状态,不能被再次“获取”。锁住的自旋锁必须被“释放”后,才能再次被 “获取”。如果自旋锁已被锁住,这时有程序申请“获取”这个自旋锁,程序则处于“自旋”状态。所谓自旋状态,就是不停地询问是否可以“获取”自旋锁。

自旋锁不同于线程中的等待事件。在线程中如果等待某个事件,操作系统会使这个线程进入休眠状态,CPU会运行其它的线程。而自旋锁则不同,CPU不会切换到别的线程,而是让这个线程一直“自旋”等待。因此,对自旋锁占用时间不宜过长,否则会导致申请自旋锁的其它线程处于自旋,浪费CPU的处理时间。

NDIS库提供的自旋锁可用来在相同IRQL的线程之间同步访问共享资源,当共享资源的两个线程运行在不同的IRQL时,NDIS库提供一种机制临时提升低IRQL代码的IRQL,从而达到对共享资源的串行访问。

NDIS库的自旋锁用NDIS_SPIN_LOCK数据结构表示。

使用自旋锁前,首先对其初始化,可使用NdisAllocateSpinLock函数。

VOID  NdisAllocateSpinLock(  IN PNDIS_SPIN_LOCK  SpinLock  );

1 2 3 4 5  下一页

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接