下面是Windows NT操作系统的CRITICAL_SECTION声明:
Listing 68.14: (Windows Research Kernel v1.2) public/sdk/inc/nturtl.h
Listing 68.15: Windows 2008/ntdll.dll/x86 (begin)
在这段代码中最重要的指令是BTR(带LOCK前缀):把目的操作数中由源操作数所指定位的值送往标志位CF,并将目的操作数中的该位置0。这是一个原子操作,会阻塞掉其它同时想要访问这段内存的CPU(参看BTR指令的LOCK前缀)。如果LockCount是1,则重置并返回:我们现在正处于临界区。如果不是,则表示其它线程正在占用,将进入等待状态。
下面展示了LeaveCriticalSection()函数的运行过程:
Listing 68.16: Windows 2008/ntdll.dll/x86 (begin)
LOCK前缀是非常重要的:如果两个线程,每个都工作在不同的CPU或CPU核心,它们都能够进入critical section并修改内存数据,这种行为将导致不确定的后果。