临界区是指访问共享资源(如全局变量、共享内存、设备寄存器等)的代码段,这些资源在同一时间只能被一个线程或进程访问,以避免竞态条件(Race Condition)的发生。
atomic_t v = ATOMIC_INIT(0);
atomic_inc(&v); // 原子增加
spinlock_t lock = SPIN_LOCK_UNLOCKED;
spin_lock(&lock);
// 临界区代码
spin_unlock(&lock);
struct mutex lock;
mutex_init(&lock);
mutex_lock(&lock);
// 临界区代码
mutex_unlock(&lock);
struct semaphore sem;
sema_init(&sem, 1); // 初始值为1的二元信号量
down(&sem);
// 临界区代码
up(&sem);
rwlock_t lock = RW_LOCK_UNLOCKED;
read_lock(&lock);
// 只读临界区
read_unlock(&lock);
write_lock(&lock);
// 读写临界区
write_unlock(&lock);
临界区的正确管理是多线程/多进程编程中的核心问题,对系统稳定性和性能有重大影响。