深度剖析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 );
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
赞助商链接