临界区段

✍ dations ◷ 2025-10-12 16:28:06 #协同控制,程序架构

在同步的程序设计中,临界区段(Critical section)指的是一个访问共享资源(例如:共享设备或是共享存储器)的程序片段,而这些共享资源有无法同时被多个线程访问的特性。

当有线程进入临界区段时,其他线程或是行程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共享资源是被异或的使用,例如:semaphore。

只能被单一线程访问的设备,例如:打印机。

一个最简单的实现方法就是当线程(Thread)进入临界区段时,禁止改变处理器;在uni-processor系统上,可以用“禁止中断(CLI)”来完成,避免发生系统调用(System Call)导致的上下文交换(Context switching);当离开临界区段时,处理器回复原先的状态。

在Windows操作系统,CRITICAL_SECTION是一种同步对象类型,用于同一个进程内的多线程同步访问资源。如果是跨进程同步,需要使用互斥锁(mutex)。

临界区对象首先需要初始化,通过调用操作系统API函数InitializeCriticalSection。各个线程调用函数 EnterCriticalSection, TryEnterCriticalSection, 或LeaveCriticalSection来使用临界区。使用结束后或者重初始化临界区之前,需要调用 DeleteCriticalSection 。

WINNT.H中定义的临界区数据结构如下:

struct RTL_CRITICAL_SECTION{   PRTL_CRITICAL_SECTION_DEBUG DebugInfo;   LONG LockCount;   LONG RecursionCount;   HANDLE OwningThread;   HANDLE LockSemaphore;   ULONG_PTR SpinCount;};

结构的各域的解释:

RTL_CRITICAL_SECTION_DEBUG结构如下:struct _RTL_CRITICAL_SECTION_DEBUG{

   WORD   Type;   WORD   CreatorBackTraceIndex;   RTL_CRITICAL_SECTION *CriticalSection;   LIST_ENTRY ProcessLocksList;   DWORD EntryCount;   DWORD ContentionCount;   DWORD Spare;

}结构的各域的解释:

MSDN Library -- Critical section

相关

  • 胰脂肪酶胰脂肪酶(Pancrelipases),特别是它的缓释剂型(例如: Creon, Pancreaze, Pertzye, Ultresa, Zenpep) 是猪源性胰淀粉酶的商用混合物(作用于淀粉水解酶),胰脂肪酶和胰凝乳蛋白
  • 相似疾病或共病指的是将某个特定疾病从其他展现类似症状的疾病中区分开来。医师对病患作鉴别诊断,诊断特定的疾病,或著至少消除立即致命的情有时每个可能的病因都被称为一个鉴别诊断(例如:在评
  • 磺胺嘧啶磺胺嘧啶(Sulfadiazine,可缩写为SD)是一种磺胺类抗菌药。磺胺嘧啶属于广谱抗菌药,对多数的革兰氏阳性菌和革兰氏阴性菌均有效,可用于全身感染的治疗。磺胺嘧啶最早于1941年在美国
  • 尿布尿片,又称为尿布、尿裤、尿不湿、屎片,是因为无法或尚未训练自行控制大小便而穿着。除此之外,也有让成人使用的成人纸尿片。尿片的出现,大大地改变了婴幼儿及抚养者的生活,方便性
  • 盲点视网膜的后方称为眼底,在正对视神经起始处,有一呈白色的圆形隆起,称为视神经盘(又称视神经乳头)。此处是神经纤维进出的地方,没有感光细胞,不能感应到光线,故称为盲点。影像能够在盲
  • 印度斯坦语印度斯坦语(हिन्दुस्तानी,ہندوستانی‬)又称印地—乌尔都语,是语言学家对印度斯坦(即南亚北部)的印地语、乌尔都语及其相应方言的统称。这些语种的语法基本相
  • 助攻助攻(英语:Assist)是指于篮球比赛中协助队友得分的行为,意思是当球员把球传给他的队友,而该队友位于一个有利位置(例如没有对手防守或可直接上篮)而顺利入球得分,传球球员便算是助攻
  • 埃利亚斯·赫拉维埃利亚斯·赫拉维(阿拉伯语:الياس الهراوي‎,英语:Elias Hrawi,1925年9月4日-2006年7月6日),曾任黎巴嫩总统(1989年至1999年)。他出生于一个富裕的天主教马龙派家庭,曾从事
  • 重力异常重力异常(英语:Gravity anomaly)在大地测量学中用于描述真实重力与正常重力之间的差异。在大地水准面上,某点处的真实重力矢量与该点沿法线到参考椭球面上投影处的正常重力矢量
  • 梅·克拉克梅·克拉克(英语:Mae Clarke,原名Violet Mary Klotz,1910年8月16日-1992年4月29日)是一名美国的女演员,最出名是在《科学怪人》中饰演鲍里斯·卡洛夫追求的新娘,也在《人民公敌》中