临界区段

✍ dations ◷ 2025-11-26 02:28:23 #协同控制,程序架构

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

相关

  • 克莱恩-莱文综合征克莱恩-莱文症候群(英语:Kleine-Levin syndrome,简称为KLS),又名睡美人症候群(英语:Sleeping Beauty syndrome),系一种不常见的睡眠障碍,特征是持续的阵发过度嗜睡症及认知或情绪变化
  • 波河波河(意大利语:Po)是意大利最长的一条河流。位于意大利北部,发源于阿尔卑斯山地区,向东在威尼斯附近注入亚得里亚海,全长652公里。流域面积71,000平方公里。流经都灵。在伦巴第平
  • 草胡椒属草胡椒属(学名:Peperomia)是胡椒科下的一个属,为一年生或多年生、肉质草本植物。该属共有约1000种,分布于热带和亚热带地区。Peperomia argyreiaPeperomia blandaPeperomia campt
  • 雪海燕P. nivea nivea(G. Forster, 1777) P. nivea confusa(Mathews, 1912)雪鹱(学名:Pagodroma nivea)是雪鹱属的唯一一种,也是三种仅在南极繁殖的鸟类之一。是所有鸟类中繁殖地最靠
  • 荔波荔波县是中华人民共和国贵州省黔南布依族苗族自治州下属的一个县。面积2432平方公里。邮政编码558400,县政府驻玉屏街道。荔波于秦王赢政三十六年(公元前221年)为象郡毋敛县地
  • 理性预期理性预期(英语:Rational Expectations),或者叫做理性预期假说(英语:Rational Expectation Hypothesis),一个经济学的假说,人们针对某个经济现象(例如市场价格)进行的预期,是理性的。他们
  • 二氧化锗二氧化锗,化学式GeO2。白色粉末或无色结晶,为四方晶系、六方晶系或无定形体。六方结晶与β-石英同构,锗为四配位;四方结晶具有超石英型结构,类似于金红石,其中锗为六配位。 高压下
  • 2005年9月逝世人物列表2005年逝世人物列表:1月 - 2月 - 3月 - 4月 - 5月 - 6月 - 7月 - 8月 - 9月 - 10月 - 11月 - 12月下面是2005年9月逝世的知名人士列表:
  • 柳本·贝罗夫柳本·贝罗夫(保加利亚语:Любен Беров,1925年10月6日保加利亚索非亚-2006年12月7日),保加利亚经济学家、政治家,曾任保加利亚总理。贝罗夫毕业于索非亚大学经济系,1950年-
  • 巴里克黄金公司巴里克黄金公司(Barrick Gold Corporation)是现在世界最大的金矿开采公司,总部位于加拿大安大略省多伦多。2006年1月20日,巴里克黄金公司收购普莱斯多姆。此举使得巴里克黄金超