临界区段

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

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

相关

  • 年代年代,中国古代亦称“秩”,1个年代为连续的10年,通常适用于用公元纪年。年代的划分为:依照公元纪年,某一年如果能被10整除,那么当年及此后9年(若公元前则为之前9年)共10年称为1个年代
  • 碱锰电池碱性电池(英文:Alkaline battery)指使用碱性电解液的电池,一般生活中指称碱性电池,指的是碱性锌锰电池。广义上,碱性电池使用的电极材料包括:锌-二氧化锰、锌-氧化汞、镉-氢氧化镍
  • 甲硝脞甲硝唑(Metronidazole,MNZ),目前多以咪唑尼达(Flagyl)的商品名流通,是一种抗生素和抗原虫剂(英语:antiprotozoal medication)。常单独或和其他抗生素一起使用,作为治疗骨盆腔炎、心内膜
  • 蜡壳耳目参见内文蜡壳耳目(学名:Sebacinales)是伞菌纲下的一目。该目真菌分布广泛,大多为陆生,其中许多与包括兰科在内的植物共生形成兰菌根。蜡壳耳目仅含蜡壳耳科(学名:Sebacinaceae)一科,
  • Tolypocladium inflatum多孔木霉(Tolypocladium inflatum),是一种无性子囊菌,最初分离自挪威的土壤,在一定的条件下能产生环孢素。原先分离出环孢素时,以为这种真菌属于木霉菌属(Trichoderma),因此将它命名
  • 广东外语外贸大学坐标:23°12′01″N 113°17′21″E / 23.2003°N 113.2892°E / 23.2003; 113.2892 中国广东省广州市 北校区:白云区白云大道北2号广东外语外贸大学(英语:Guangdong Universi
  • 上夹河镇上夹河镇,是中华人民共和国辽宁省抚顺市新宾满族自治县下辖的一个乡镇级行政单位。上夹河镇下辖以下地区:五龙村、马尔墩村、大堡村、腰站村、胜利村、古楼村、河西村、南嘉禾
  • 樱草花山坐标:51°32′23″N 0°09′39″W / 51.5396°N 0.1608°W / 51.5396; -0.1608樱草花山(Primrose Hill)是伦敦摄政公园北侧的一座高256英尺(78米)的山丘,以及山丘周围地区的名称。
  • 本巢郡本巢郡(日语:本巣郡/もとすぐん  */?)为岐阜县管辖的一郡。人口17,667 人、面积5.17 km²。(2003年)现在管辖有以下1町。
  • 街机主板街机主板(日语:アーケードゲーム基板,英语:Arcade system board,又译作“街机底板”、“街机系统”),是针对街机(主机)所设计的主板。街机的游戏ROM芯片,焊死固定在主板,所以游戏过时或