在 Linux 系统中,锁(Lock)是并发控制的核心机制,主要用于解决多线程/多进程环境下的资源竞争问题。以下是 Linux 中常见的锁类型及其分类:
主要用于多线程编程(如 POSIX 线程库 pthread)。
互斥锁(Mutex)
PTHREAD_MUTEX_RECURSIVE)。pthread_mutex_init(), pthread_mutex_lock(), pthread_mutex_unlock()自旋锁(Spinlock)
pthread_spin_init(), pthread_spin_lock()读写锁(Read-Write Lock)
pthread_rwlock_init(), pthread_rwlock_rdlock(), pthread_rwlock_wrlock()条件变量(Condition Variable)
pthread_cond_init(), pthread_cond_wait(), pthread_cond_signal()屏障(Barrier)
pthread_barrier_init(), pthread_barrier_wait()Linux 内核提供的锁机制,部分也可通过系统调用供用户态使用。
原子操作(Atomic Operations)
x86 的 LOCK 前缀)保证操作的原子性。atomic_t 类型,atomic_inc(), atomic_dec()。内核互斥锁(Kernel Mutex)
信号量(Semaphore)
sem_init(), sem_wait(), sem_post()(用户态);内核态使用 struct semaphore。RCU(Read-Copy-Update)
顺序锁(Seqlock)
用于多进程间对文件的同步访问。
劝告锁(Advisory Lock)
fcntl()(F_SETLK, F_GETLK)。强制锁(Mandatory Lock)
mand 选项。flock()
Futex(Fast Userspace Mutex)
内存屏障(Memory Barrier)
smp_rmb(), smp_wmb())。mutex 或 rwlock。spinlock(但用户态慎用)。RCU 或 seqlock(内核场景)。通过合理选择锁类型,可以平衡性能与安全性。