临界区段

✍ dations ◷ 2025-11-29 07:45:42 #协同控制,程序架构

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

相关

  • 肾绞痛肾绞痛(Renal colic),腹痛的一种类型,多由肾结石或输尿管结石引发。肾绞痛并不是一种独立的疾病,而是一种症状,因而病因也有可能是其他原因而引发。医学导航:泌尿系统解剖/生理/发
  • 理性的时代前苏格拉底 · 古代 中世纪 · 文艺复兴 17世纪 · 18世纪 · 19世纪 · 20世纪 后现代 · 当代17世纪哲学一般被认为是近代哲学的开端。中世纪的方法――尤其
  • 心肌层心肌是由心肌细胞构成的一种肌肉组织。心肌细胞分布不单在心壁上,临心大血管上也有心肌的分布。心肌也是横纹肌。相比起骨骼肌细胞,心肌细胞有其自身的特点:
  • LGBT权利活动家列表在同志历史上,同志权利运动家是指奉献己力,推动同志权利改革的人。他们或投身政治、参与立法工作,或以出版、投书、舆论等方式宣扬同志理念,为同志争取平等权利。
  • 凤凰计划凤凰计划可以指:
  • 三锯拟蝗蛙三锯拟蝗蛙(学名:Pseudacris triseriata)是加拿大及美国的一种树蟾。它们分布在魁北克南部至南达科他州,南至堪萨斯州及奥克拉荷马州。三锯拟蝗蛙体型很小,只有40毫米长。它们呈
  • 琼塔尔语琼塔尔语(Chontal languages)是属于霍坎语系的语言,为墨西哥琼塔尔人的语言。其中包括两种可以互通的语言高地琼塔尔语(Highland Chontal)低地琼塔尔语,(Lowland Chontal)两者的使用
  • 四氯化氙四氯化氙是一种不稳定的氙化合物,化学式为XeCl4。它很不稳定,不能在室温下稳定存在,也不能通过化学方法合成,只能通过含放射性129I的KICl4经β衰变得到,因此获得的量很少。它的空
  • 舒展辊舒展辊,spreader roll,起舒展、消除皱纹作用的导网(毯)辊或引纸辊,其辊面上有自中央部位向两端展伸的左、右旋凸出螺线或沟纹。
  • 玛莉娜·阿布拉莫维奇玛莉娜·阿布拉莫维奇(塞尔维亚语:Марина Абрамовић,Marina Abramović,1946年11月30日-),出生于南斯拉夫贝尔格莱德,是位行为艺术家。自1970年代开始活跃至今,从事行