临界区段

✍ dations ◷ 2024-12-23 10:16:08 #协同控制,程序架构

在同步的程序设计中,临界区段(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

相关

  • ɯ̞次闭后不圆唇元音是一种元音。在声学上,更准确的称呼应为次闭次后不圆唇元音。国际音标写作⟨ɯ̞⟩(较低(英语:Relative articulation)的)或⟨ɤ̝⟩(较高(英语:Relative articulati
  • 1155年重要事件及趋势重要人物
  • 五指湖五指湖国家森林(英语:Finger Lakes National Forest)是一座美国国家森林,面积16,259英亩(65.80平方千米),位于纽约州的瑟内萨县、斯凯勒县,五指湖区的瑟内萨湖(英语:Seneca Lake (New
  • 川南行政区 (1950–1952)川南行政区是中华人民共和国建国后成立的省级行政区,于1950年至1952年存在。1949年12月,西南战役结束,解放军攻占四川全省。由于四川省地域较大,人口近八千万,为便利行政管理,分划
  • 吴定良吴定良(1894年2月5日-1969年3月24日),原名骏、士华,字均一,江苏省金坛县人,人类学家、教育家。中国人类学的主要奠基人。吴定良在人类学研究方面的内容广泛,涉及到人类进化、现代人
  • 新西兰国家广播电台新西兰国家广播电台(英语:Radio New Zealand;毛利语:Te Reo Irirangi o Aotearoa)是依据1995年的专法成立、由新西兰政府资金支持的公共广播电台,播出新闻、时事、艺术与音乐。
  • 塞克斯图斯·庞培塞克斯图斯·庞培(拉丁语:Sextus Pompeius Magnus Pius,前67年-前35年),罗马共和国晚期将领,格奈乌斯·庞培之子,也被称作小庞培。他是反对后三头同盟的焦点人物。 小庞培为格奈乌斯
  • 乔纳森·嘉诺格里乔纳森·嘉诺格里(Jonathan Djanogly,1965年6月3日-)是一位英格兰政治人物,他的党籍是保守党。自2001年开始,他担任亨丁顿选区选出的英国下议院议员。他出生在一个英国犹太人家庭
  • 道格拉斯·卡斯维尔道格拉斯·卡斯维尔(英语:Douglas Carswell,1971年5月3日-)是英国的一位政治人物,他在2005年当选哈里奇选区议员,2010年改为担任克拉克顿选区议员。他曾经是一位保守党党员,但在2014
  • 黑部川第四发电厂黑部川第四发电厂(日语:黒部川第四発電所)位于富山县黑部市黑部川上游,为隶属于关西电力的水力发电厂。通常简称为黑四发电厂或是黑四。自黑部水坝引水进行发电。1958年,向世界银