临界区段

✍ dations ◷ 2025-11-27 01:12:35 #协同控制,程序架构

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

相关

  • 犹大·福克曼犹大·福克曼(英语:Judah Folkman,1933年2月24日-2008年1月15日),美国医学专家,是肿瘤学和血管新生研究领域的先驱和权威。他是诺贝尔医学奖的有力候选,但不幸于2008年突然去世,享年7
  • 印地安美洲原住民,是对美洲所有原住民的总称。美洲原住民中的绝大多数为印第安人,剩下的则是主要位于北美洲北部的因纽特人。美洲原住民属于东亚人种美洲支系,与现代东亚人有共同的祖
  • 溴氯二氟甲烷二氟一氯一溴甲烷,也称为海龙1211或氟利昂12B1,是化学式为CF2ClBr的有机化合物,是卤代烷的一种。二次世界大战时首次使用二氟一氯一溴甲烷作为飞机及坦克车的灭火剂。约在1973
  • 石锅拌饭 (돌솥비빈밥)韩式拌饭(韩语:비빔밥 或교반/攪飯 ),韩文비빔是混和的意思,밥是米饭的意思,所以비빔밥就是拌饭的意思,是韩国百年历史的传统米饭料理,又称石锅拌饭、古董饭,台湾亦有音译为乒乓饭、
  • 日本电信电话公社日本电信电话公社(Nippon Telegraph and Telephone Public Corporation;NTTPC),简称为“电电公社”(一般也被表记为“電々公社”),为曾存在于日本的特殊法人,主要业务是电报(日本称为
  • 米歇尔·德勃雷米歇尔·德勃雷(Michel Debré,1912年1月15日-1996年8月2日),法国政治人物,被誉为法国现行宪法之父。曾任法兰西第五共和国首任总理。德勃雷出身于法国影响力很大的德布雷家族。支
  • 傅园慧傅园慧(1996年1月7日-),浙江杭州人,祖籍绍兴,中国女子游泳运动员,就读于天津医科大学康复与运动医学系。BBC引述网友评论傅园慧是“一个被游泳事业耽误了前程的段子手”。1996年1月
  • 斯里兰卡摩尔人斯里兰卡摩尔人(僧伽罗语:ලංකා යෝනක;泰米尔语:இலங்கைச் சோனகர்)是斯里兰卡第三大族群,在该国的人口约有200万。他们是穆斯林,祖先是八至十五世纪由马拉巴尔
  • 荣禄荣禄(1836年4月6日-1903年4月11日),字仲华,满族,乌喇瓜尔佳氏。满洲正白旗人。晚清军事家、政治家。末代皇帝溥仪的外祖父,慈禧太后的亲信。出身于世代军官家庭,自称是清初开国五大
  • 巴托洛梅贝格巴托洛梅贝格(德语:Bartholomäberg)是奥地利福拉尔贝格州布卢登茨县的一个市镇。总面积27.28平方公里,总人口2253人,人口密度82.6人/平方公里(2005年)。