临界区段

✍ dations ◷ 2025-12-06 10:53:45 #协同控制,程序架构

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

相关

  • 依附依附理论(英语:attachment theory)是一种心理学、演化、动物行为学理论,旨在探讨“人际关系”:二或多个个体间的感情纽带。依附理论最重要的原则是,幼童因为社会与情感需求,而至少
  • 荒岛荒岛(又称无人岛、无居民岛;英文:desert island)是一个无人居住或人口稀少的岛。在世界上,荒岛比有人岛还要多。除了地理上的概念,荒岛也常用于文学、比喻和大众想象,指一个人或一
  • 联合国中文日联合国中文日(英语:UN Chinese Language Day)是联合国发起,在每年4月20日举行的纪念活动。联合国中文日是联合国在2010年所提出,目的是为了“庆祝多种语言以及文化的多样性,也提倡
  • 银杏属Salisburia Sm.银杏属是银杏科下唯一现存的一个属,主要产于中国和日本。银杏属下仅存银杏(Ginkgo biloba)一个种和数个变种。因为曾经发现2.7亿年前的二叠纪时期的化石中的植物
  • 非零和博弈非零和博弈与零和博弈相对。非零和博弈表示在不同策略组合下各博弈方的得益之和是不确定的变量,故又称之为变和博弈。零和博弈表示所有博弈方的利益之和为零或一个常数,即一方
  • 1,3-偶极环加成反应1,3-偶极环加成反应(1,3-dipolar cycloaddition),或被称为Huisgen反应,Huisgen环加成反应,是发生在1,3-�内盐和烯烃、炔烃或其衍生物之间的一个协同周环的环加成反应。烯烃类化合
  • 黄绍第黄绍第(1855年-1914年),字叔颂,号缦庵。浙江瑞安人。光绪十六年(1890年)进士,同年五月,改翰林院庶吉士,光绪十八年五月,散馆,授翰林院编修。曾任江南乡试副建乡试正考官。辛亥革命后隐退
  • 黄奭黄奭(1809年-1853年),本名黄锡麟,字右原。清代辑佚家,江苏甘泉人。原籍浙江。嘉庆十四年(1809年)生。先世浙江余姚人,其父黄至筠,经营两淮盐业致富。黄奭早年在扬州安定书院读书,受两淮
  • 墨脱新月蕨墨脱新月蕨(学名:)为金星蕨科新月蕨属下的一个种。
  • 米歇尔·克罗米歇尔·克罗(Michel Croz,1830年4月22日-1865年7月14日),法国登山队员。1859年首度成为登山指导员,被威廉马修斯聘请前往勃朗峰。1863年他同马修(Mathews, T. G. Bonney),和自家兄弟