临界区段

✍ dations ◷ 2024-09-20 17:30:58 #协同控制,程序架构

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

相关

  • 法国铁路法国铁路运输的铁路交通运输几乎全部由法国国家铁路运行(SNCF、Société Nationale des Chemins de fer français),铁路设施(德语:Bahnanlage)由法国铁路线路事业公社(RFF、Rése
  • 埃尔伍德·詹森埃尔伍德·詹森(英语:Elwood Vernon Jensen,1920年1月13日-2012年12月16日),美国医学家,辛辛那提大学医学院Vontz分子生物学研究中心乔治和伊丽莎白癌症研究主席。在2004年,他因对雌
  • 依地普仑艾司西酞普兰(英语:Escitalopram),或称依地普仑 ,商品名为立普能(Lexapro)等,是一种选择性5-羟色胺再摄取抑制剂(SSRI)类抗抑郁药。 美国食品药品监督管理局(FDA)批准其用来治疗成人和12
  • 烧烫伤灼伤是指皮肤或其他组织因热力、电力、化学物质、摩擦力或辐射所造成的创伤。大部分的灼伤是因接触滚烫液体、固体或火焰的高温。暴露在烹饪的火焰或不安全的煮食器具的危险
  • 宋孝武帝宋孝武帝刘骏(430年9月19日-464年7月12日),字休龙,小字道民,宋文帝刘义隆的第三子,南朝宋第五任皇帝。453年3月16日深夜,皇太子刘劭于京城建康(今南京市)行凶,杀害父皇宋文帝刘义隆,自称
  • U型潜艇U型潜艇是特指在第一次世界大战和第二次世界大战时,德国使用的潜艇。由于德国潜艇的编号都用德文“Untersee-boot”(意思为“潜艇”,按照英文直译写法为Undersea boat,简称U-boa
  • 王之王之(1907年-2017年),字淡如,中华民国将领、教师,生于湖南长沙。曾先后就读于清华学校、美国威斯康辛大学、洛维其大学。1928年,又进入西点军校学习。回国后,历任税警总团及第八军排
  • 各国最低点列表各国最低点列表列出世界各国或地区的最低点。资料来源主要来自美国中央情报局世界概况。
  • 氯化锫氯化锫是一种无机化合物,化学式BkCl3,有很强的放射性。
  • 约瑟夫·韦德伯恩约瑟夫·韦德伯恩(Joseph Henry Maclagan Wedderburn,1882年2月2日-1948年10月9日),苏格兰数学家,皇家学会会员。他职业生涯中的大部分时间在普林斯顿大学任教。韦德伯恩是一位卓