临界区段

✍ dations ◷ 2025-07-03 10:39:50 #协同控制,程序架构

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

相关

  • 劓刑劓是中国古代的一种刑罚,属五刑内肉刑的一种,被处劓刑的受刑人被割去鼻子。汉文帝时,将应受劓刑的罪改为笞刑,在隋以后,刑典中即不再有劓这种刑罚。
  • 唐本草《新修本草》,因成书时主持修撰的是英国公李
  • 踢睾踢睾(金蹴り ?)是一种恋物癖形式与色情的子类型,指的是一个男人的睾丸被另一人以踢击或用拳头攻击的方式虐待同时也达到快速射精的效果,施虐与受虐的双方可以是同性或异性关系
  • 通货膨涨通货膨胀(英语:inflation,简称通胀)本意为货币流通数量增加,但也指向因货币流通数量增加,而使得物价水准在某一时期内,连续性地以相当的幅度上涨,也就是物价上升,货币购买力下降的现
  • 莱茵霍尔德·梅斯纳尔莱茵霍尔德·梅斯纳尔(意大利语:Reinhold Messner,1944年9月17日-),来自南蒂罗尔的意大利登山家兼探险家,常被人称为有史以来最伟大的登山运动员。最令他名声远扬的壮举包括人类史
  • 张花高速公路张花高速公路指湖南省张家界市至湘西土家族苗族自治州花垣县高速公路,为湖南省“五纵七横”规划“第二横”浏阳至花垣高速路段。起于张家界市永定区阳湖坪镇,接长张高速公路,止
  • 墨西哥薄饼墨西哥薄饼(英语:tortilla)是在墨西哥、美国等地流行的用玉米粉或小麦面粉烙制的薄饼。使用小麦制成的薄饼称之为面粉薄饼(flour tortilla),使用玉米制成的薄饼则称为墨西哥玉米饼
  • 斯里兰卡摩尔人斯里兰卡摩尔人(僧伽罗语:ලංකා යෝනක;泰米尔语:இலங்கைச் சோனகர்)是斯里兰卡第三大族群,在该国的人口约有200万。他们是穆斯林,祖先是八至十五世纪由马拉巴尔
  • 土耳其入侵塞浦路斯 土耳其获得军事上的胜利  土耳其 塞浦路斯土耳其入侵塞浦路斯,发生于1974年7月20日,土耳其军队以保护土耳其裔塞浦路斯人为借口,侵入塞浦路斯,并占据了全塞浦路斯36%的领土
  • 需要需要在心理学上指个体内部生理与心理之间的不平衡状态,它提供了有机体活动的动力,是动机产生的基础之一。