临界区段

✍ dations ◷ 2025-11-23 00:09:20 #协同控制,程序架构

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

相关

  • 国立台北护理健康大学国立台北护理健康大学,简称北护大、国北护、北护,是一所位于台湾台北市的国立科技大学,以教授健康科学课程为主。内江街校址为城区部,仅语言治疗与听力学系暨硕士班、健康事业管
  • 达美航空达美航空(英语:Delta Air Lines, Inc.,NYSE:DAL)是一家总部位于美国乔治亚州亚特兰大的航空公司,目前是世界上国内客运总里程与客运机队规模第二大的航空公司。达美航空为天合联盟
  • 阿尔塞斯阿尔塔薛西斯四世·阿尔塞斯(古波斯楔形文字:
  • 阿尔布雷赫特·冯·华伦斯坦阿尔布雷希特·文策尔·优西比乌斯·冯·华伦斯坦(德语:Albrecht Wenzel Eusebius von Wallenstein,捷克语:Albrecht Václav Eusebius z Valdštejna,1583年9月24日-1634年2月25
  • 霍兰鸟霍兰鸟属(属名:Hollanda)是一属已经灭绝的鸟类,属小型掠食性走禽,化石发现于蒙古邻近戈壁阿尔泰省与巴彦洪戈尔省南部交界处的西戈约特组(Barun Goyot Formation)地层。其化石时期
  • 大角鹿属大角鹿属(英语:)是生存于上新世晚期至更新世晚期欧亚大陆的鹿类,是冰河时期重要的草食性动物,为冰河期著名的草食动物之一,被认为是现存黇鹿的近亲。其下最大的物种,正是最著名的大
  • 伊朗改革派伊朗改革派(波斯语:اصلاح‌طلبان‎,转写:Eslâh-Talabân)是在伊朗政治派别支持前总统穆罕默德·哈塔米的改变伊朗政治制度的计划,包括更多的自由和民主。
  • 加加加速度物理学上,加加加速度,是位移对时间的四阶导数;一阶,二阶,三阶导数分别称为速度,加速度,加加速度。换句话说,加加加速度是加加速度对时间的导数。加加加速度被如下任意一个等价的公式
  • 帕拉玛拉王朝帕拉玛拉王朝(英语:Paramara dynasty)是9-14世纪中印度的一个拉其普特人王朝,位于历史上的摩腊婆地区,大致对应今天的拉贾斯坦邦东部和中央邦西部,首都在达尔(Dhar)。瞿折罗-普腊
  • 楚河 (中国)楚河,古战场,今河南省荥阳市广武山鸿沟古运河地区。公元前203年,西楚霸王项羽与汉高祖刘邦会战于在此,双方皆不能取胜,遂签定协议:“中分天下。割鸿沟以西者为汉,鸿沟而东者为楚”