临界区段

✍ dations ◷ 2025-09-11 05:02:07 #协同控制,程序架构

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

相关

  • 人行道人行道(行人专用道)是专门为了行人而铺设的道路。
  • 乌克兰大饥荒乌克兰大饥荒(乌克兰语:Голодомор,拉丁字转写:Holodomor;意为“以饥饿灭绝”,出自“морити голодом”,意为“以饥饿杀死”),是1932年至1933年发生在苏联乌克兰
  • 1095年重要事件及趋势重要人物
  • 郝小江郝小江(1951年7月10日-),重庆人,中国植物化学、天然产物化学家,中国科学院昆明植物研究所研究员。2019年当选为中国科学院院士。1976年毕业于贵州大学化学系,1985年毕业于中国科学
  • 厚头龙厚头龙属(属名:Pachycephalosaurus)又名肿头龙,在希腊文意为“有厚头的蜥蜴”,属于厚头龙科,生存于晚白垩纪马斯特里赫特阶的北美洲,和霸王龙、三角龙分布重合。化石已在美国的蒙大
  • 鲁国镛鲁国镛(英语:Fred Kwok-Yung Lo,1947年10月19日-2016年12月16日),出生于中华民国南京市,美籍华人天文学家、中央研究院院士。1969及1974年自麻省理工学院物理系取得学士及博士学位
  • 巴比肯艺术中心巴比肯艺术中心(英文:Barbican Centre)是位于英国伦敦的的表演艺术中心,位于市中心伦敦城北部的巴比肯屋村。该中心定期举行音乐、戏剧、电影节目及艺术品展览,是全欧洲最大的表
  • 全真教全真道也称全真教,中国道教的重要派别,由王重阳等人创于金熙宗正隆四年(1159)陕西京兆区终南山刘蒋村,世宗大定七年(1167)改以山东宁海军(甯海州)等地为中心。元代,张紫阳一系所创立以
  • 锡化镁锡化镁是一种二元金属间化合物,化学式为Mg2Sn。锡化镁可由相应化学计量比的单质共熔得到:锡化镁是浅蓝色的晶体,属立方晶系,空间群Fm3m,晶胞参数 = 0.67594 nm, Z = 4,具有CaF2结
  • 周德华 (唐朝)周德华(?年-?年),周季崇与刘采春的女儿,善歌《杨柳枝词》。《杨柳枝曲》作者说法不一。有的记载为周德华采贺知章、滕迈、杨巨源、韩琮、刘禹锡等人之作为歌词,也有说是刘禹锡的作品