临界区段

✍ dations ◷ 2025-09-18 15:51:36 #协同控制,程序架构

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

相关

  • 烷基磺酸酯类磺酸酯为磺酸的有机酯,都含有R-SO2O−官能团。磺酸酯具有通式:R1SO2OR2。如R2基团为甲基,R1基团为三氟甲基,则化合物为三氟甲磺酸酯。由于RSO2O−基团在SN1,SN2,E1和E2反应中是一
  • 埃利亚斯·施泰因埃利亚斯·梅纳凯姆·施泰因(英语:Elias Menachem Stein,1931年1月13日-2018年12月23日),美国数学家。他是调和分析的领军人物之一,自1963年至去世一直担任普林斯顿大学的数学教授
  • 西孟加拉西孟加拉邦(孟加拉语:পশ্চিম বঙ্গ;尼泊尔语:पश्चिम बङ्गाल;英语:West Bengal)位于印度东部,面积88,752平方公里,人口为九千一百万(2011年)。此邦位于孟加拉地区
  • 闽南闽南(闽南语:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,Arial,sans-serif} Bân-l
  • 市政厅市政厅(英语:City Hall)是一座位于英国伦敦的公共建筑,是大伦敦政府的总部,也是伦敦市长的办公室所在地。它座落在萨瑟克(Southwark),泰晤士河边,邻近伦敦塔桥。市政厅由诺曼·福斯特
  • 泰勒坐标:32°20′3″N 95°18′0″W / 32.33417°N 95.30000°W / 32.33417; -95.30000泰勒 (Tyler)是美国德克萨斯州史密斯县的一个城市,位于德州东部,是该县县治,得名于第十任总统
  • 卧虎藏龙 (电视剧)邱心志、黄奕、何润东 蒋勤勤《卧虎藏龙》(英文:Crouching Tiger, Hidden Dragon)是亚洲国际文化及九洲音像出版公司联合出品的古装武侠电视剧,由梁凯程执导,邱心志、黄奕、何润
  • 苏菲·马修苏菲·马修(法语:Sophie Massieu;1975年2月8日-)是一名法国的新闻从业员,以及行脚电视节目《你是我的眼(法语:Dans tes yeux)》主持人。她的父亲是一名农夫,她在出生时就被判定失明。
  • 尼尔·盖曼尼尔·"尼尔曼"·盖曼(英语:Neil "Neilman" Gaiman,1960年11月10日-)是出生于英格兰的犹太裔作家,写作领域跨及奇科幻长短篇小说、视觉文学、漫画及剧本编写。被斯蒂芬·金誉为“
  • 胡世安胡世安(?-1663年),字处静、号菊潭、秀岩,四川省资州直隶州井研县人,明末清初政治人物,崇祯初年同进士出身。崇祯元年(1628年),登进士,累官詹事府少詹事。明亡后仕清,顺治元年,仍授詹事府少