临界区段

✍ dations ◷ 2025-06-07 11:44:54 #协同控制,程序架构

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

相关

  • 显花植物传统分类方式:Anthophyta Magnoliophyta Cronquist, Takht. & W.Zimm., 1966被子植物(学名:Angiosperms),又名开花植物或有花植物。(以前的生物学分类称“被子植物门”,而现今被归
  • 文成县文成县在中国浙江省东南部,是温州市下辖五县之一,温州著名的侨乡。位于浙江省南部,地理坐标为东经119°46’~ 120°15’,北纬27°34’~ 27°59’,中心为北纬27°47′,东经120°05′
  • 温岚温岚(泰雅语:Yungai Hayung,音译:咏爱·哈勇,1979年7月16日-),台湾原住民泰雅族女歌手、演员,新竹县泰雅族人,出身新竹县尖石乡后山马里光部落(Llyung),其族名“Yungai”为“猴子”之意
  • 校色参数所指定的目标页面不存在,建议更正成存在页面或直接建立下列一个页面(建立前请先搜寻是否有合适的存在页面可以取代):校色或学校代表色,是学校所确定的代表此校的颜色。为避免
  • 印度支那 (电影)《印度支那》(法语:)是一套1992年以大时代为背景的法国爱情片,由雷瑞·瓦尼埃执导。这部影片是雷瑞·瓦尼埃所拍的第一部史诗片,内容表现的是1930年代法国人在最后一块法属亚洲殖
  • 五月八月《五月八月》(英文:)是一部以日本的侵华战争为背景的电影,内容是关于南京大屠杀。姐姐五月、妹妹八月、妈妈、爸爸、小狗阿宝原本生活得十分幸福,爸爸是教师,一家人的生活都是靠爸
  • 弗朗西斯科·德利·斯塔比利·希丘斯切科·达阿斯科利(Cecco d'Ascoli)更出名的名字是弗朗西斯科·德利·斯塔比利(Francesco degli Stabili),有时也称作弗朗西斯科·德利·斯塔比利·希丘斯(Francesco degli Stabili
  • 吴道镕吴道镕(1852年-1936年5月18日),原名国镇,字玉臣,号用晦,晚号澹庵,祖籍浙江会稽,寄籍广东番禺。吴道镕于光绪六年(1880年)中庚辰科进士,同年五月,改翰林院庶吉士。光绪十二年四月,散馆,授翰
  • 奥斯曼帝国行政区划奥斯曼帝国行政区划是奥斯曼帝国国家机关的行政区划,是带有民事权力的军事管治政区,而在此体制外的还有附属国。奥斯曼帝国行政区划可分为两个时期,一是随着帝国崛起而初步规划
  • 法属加拿大法属加拿大为法国在北美圣劳伦斯河地区建立的一个殖民地。法属加拿大为新法兰西发展水平最高的地区。法属加拿大分为3个地区,魁北克、三河、蒙特利尔。魁北克区总督兼任新法