临界区段

✍ dations ◷ 2025-11-18 23:12:57 #协同控制,程序架构

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

相关

  • 新生儿黄疸新生儿黄疸(Neonatal jaundice)是指新生儿因为体内胆红素浓度偏高,造成巩膜及皮肤发黄(黄疸)的情形,其他的症状包括睡眠过多或是食欲不佳。其并发症包括癫痫发作、脑麻痹以及核黄
  • 国立中世纪博物馆国立中世纪博物馆(法语:Musée national du Moyen Âge)是法国首都巴黎的一座博物馆,旧名克鲁尼博物馆(法语:Musée de Cluny)。中世纪博物馆的建筑在过去曾是一座个人官邸,始建于13
  • 王志文王志文(1966年6月26日-),中国男演员、歌手、主持人,生于上海,祖籍浙江奉化。 因在电视剧《南行记》中塑造青年艾芜崭露头角,和江珊主演的电视剧《过把瘾》让王志文红遍大江南北,他在
  • 表达式表示式亦称表达式、运算式或数学表达式,在数学领域中是一些符号依据上下文的规则,有限而定义良好的组合。数学符号可用于标定数字(常量)、变量、操作、函数、括号、标点符号和分
  • 绿色无政府主义绿色无政府主义(英语:Green anarchism),无政府主义内强调环境议题的一门学说。亨利·戴维·梭罗及其著作《湖滨散记》是早期的重要影响者。部分绿色无政府主义者可被称为无政府
  • 李世李世�(594年-669年12月31日),原名徐世�,或作世绩,字懋功,亦作茂功。唐高祖李渊赐其姓李,后避唐太宗李世民讳改名为李�。曹州离狐(今山东菏泽东明县东南)人,唐初名将,曾破东突厥、高句丽,与李
  • 哈西迪犹太教哈西迪(希伯来语:.mw-parser-output .script-hebrew,.mw-parser-output .script-Hebr{font-size:1.15em;font-family:"Ezra SIL","Ezra SIL SR","Keter Aram Tsova","Taamey A
  • 双门齿兽属双门齿兽属(学名:),又名古草食有袋属,是最大的有袋类。它于160万年前出现,并于4万年前的更新世消失。双门齿兽的化石在澳洲很多地方都有发现,当中包括完整的骨骼及头颅骨,与及毛发及
  • 二氯化铂二氯化铂也称为“氯化亚铂”或“氯化铂(Ⅱ)”,是由氯元素与铂元素组成的无机化合物,分子式为PtCl2。二氯化铂能以两种晶型存在,这两种晶体都具有反磁性,皆为无味、不溶于水的淡
  • 星系型态分类星系型态分类是天文学家根据视觉上的星系外观将星系划分成不同的种类。星系分类的方法有好几种,最著名的是由爱德温·哈伯设计的哈伯序列,后来由热拉尔·佛科留斯和艾伦·桑