临界区段

✍ dations ◷ 2025-11-11 22:27:56 #协同控制,程序架构

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

相关

  • 病态生理学人体解剖学 - 人体生理学 组织学 - 胚胎学 人体寄生虫学 - 免疫学 病理学 - 病理生理学 细胞学 - 营养学 流行病学 - 药理学 - 毒理学病态生理学是一门相对比较新的医学科
  • 应力在连续介质力学里,应力定义为单位面积所承受的作用力。以公式标记为其中, σ {\displaystyle \sigma \,} 表示应力;
  • 国际植物学大会国际植物学大会(英语:International Botanical Congress,简称IBC)是一个各领域生物学家的国际性会议,由国际植物学会和菌物学会联合会(英语:International Association of Botanica
  • 圆环病毒科圆环病毒科(Circoviridae),又译作圆形病毒科。是单链DNA病毒中的一科,目前较少被研究。底下有二个属:
  • 维蒂希反应维蒂希反应(Wittig反应)是醛或酮与三苯基磷
  • 准平原准平原是指地壳隆起后若能获得较长时间的稳定,或仅有轻微的地壳运动,则地面经过悠久的侵蚀作用后,使得后来的山地高原逐渐夷平,终于变成一个接近海平面的平坦地形面。地面之起伏
  • 科科斯(基林)群岛科科斯(基林)群岛(英语:Cocos (Keeling) Islands)是澳大利亚位于印度洋的海外领地,位于澳大利亚本土与印尼之间的南纬12°0′00″ 东经96°30′00″。群岛面积达14.2平方公里;人口
  • 黑箭运载火箭黑箭号运载火箭是英国的卫星运载火箭,建基于黑骑士火箭,黑箭号运载火箭最初由Saunders-Roe公司开发,由航天组织改良,燃料为高浓度双氧水及RP-1煤油。1971年7月29日,英国官员在下
  • 约赫克普夫尔山坐标:46°55′39″N 11°06′28″E / 46.9275°N 11.10778°E / 46.9275; 11.10778约赫克普夫尔山(德语:Jochköpfl),是奥地利的山峰,位于该国西部,由蒂罗尔州负责管辖,属于斯图拜阿
  • 汉尼拔·莱克特汉尼拔·莱克特(英语:Dr. Hannibal Lecter)是由汤玛斯·哈里斯所创作的悬疑小说系列中的虚构的人物,是一名食人医师。莱克特最先出现在1981年的恐怖小说《红龙》,接着是在1988年