什么叫临界区?

111 阅读1分钟

临界区(Critical Section)是并发编程中的核心概念,指访问共享资源的代码段,该代码段在同一时刻只允许一个进程或线程执行。

核心特征:

  • 互斥性:任意时刻最多一个执行单元进入
  • 原子性:区内操作不可中断
  • 有限等待:请求进入的进程必须在有限时间内获得访问权

典型场景:

// 共享变量
int counter = 0;

// 临界区示例
lock(mutex);      // 进入临界区
counter++;        // 访问共享资源
unlock(mutex);    // 退出临界区

实现机制:

  1. 硬件级:Test-and-Set、Compare-and-Swap指令
  2. 软件级:Peterson算法、Dekker算法
  3. 操作系统级:信号量(Semaphore)、互斥锁(Mutex)、管程(Monitor)

设计原则:

  • 最小化临界区长度以减少竞争
  • 避免在临界区内进行I/O操作或阻塞调用
  • 确保所有执行路径都能正确释放锁

临界区管理不当会导致死锁、活锁或优先级反转等并发问题,是系统设计中需要重点关注的性能瓶颈。