临界区段

✍ dations ◷ 2025-12-01 21:57:47 #协同控制,程序架构

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

相关

  • 乍得语族乍得语族(Chadic languages)是亚非语系(闪含语系)之下的语族之一,语言人口主要分布于中、西非的尼日利亚北部、尼日尔、乍得、中非共和国及喀麦隆。乍得语族大致上可以分为比乌
  • 约翰逊县约翰逊县(Johnson County, Georgia)是美国乔治亚州东部的一个县。面积794平方公里。根据美国2000年人口普查,共有人口8,560人,2005年人口9,538人。县治赖茨维尔 (Wrightsville)
  • 克莱因网格克莱因方格(Klein Sexual Orientation Grid,KSOG)是弗里茨·克莱因试图通过拓展金赛量表以测试性取向的一个量表,克莱因方格首次被提出是在1978年他本人的著作《双性恋选项》(The
  • 内格莱氏法则内格莱氏法则(英语:Naegele's rule)是计算预产期的标准方法,由德国产科医生法蓝瓷·卡尔·内格莱(Franz Karl Naegele)发明,因而得名。计算方法是根据女性最后月经周期的第一天,加上
  • 朝鲜纯祖朝鲜纯祖(朝鲜语:조선 순조/朝鮮 純祖 ;1790年7月29日-1834年12月3日),名李玜(朝鲜语:이공/李玜 ),是朝鲜王朝的第23代君主,1800年8月18日至1834年12月3日在位。纯祖11岁即位,最初五年由
  • 北雷丁顿海滩 (佛罗里达州)北雷丁顿海滩(英语:North Redington Beach),是美国佛罗里达州下属的一座城镇。建立于1953年。面积约 为2.7平方公里(约合1平方英里)。根据2010年美国人口普查,该市有人口1,474人。
  • 傅鼐 (重庵)傅鼐(1758年-1811年),字重庵,清朝顺天府宛平县人,原籍绍兴府山阴县。出身吏员,乾隆末年,入赀为广南府经历,发云南,擢宁洱知县。福康安征苗疆,调傅鼐赴湖南军营司饷运,晋秩同知直隶州,赐花
  • 饶安鼎饶安鼎(?-?),字定九,江西南丰县人,清朝政治人物。雍正二年(1724年)举人,任四川绵竹县知县,调南充县知县。乾隆十二年(1741年)任福清县知县,任内修《福清县志》。
  • 奕继奕继(1829年12月2日-1830年1月22日),爱新觉罗氏,清朝道光帝第三子。奕继生于道光九年(1829年)十一月初七,生母是静妃博尔济吉特氏。是奕䜣的亲生哥哥。奕继只活了1个月,同年腊月廿八,
  • 陈怡利陈怡利(1979年1月3日-)魔羯座A型,笔名“女王”,辅仁大学应用美术系,国立政治大学广告研究所毕业。曾任职于百货公司、化妆品业行销公关工作。目前为作家,并身兼一人部落格媒体事业