在 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
(内核场景)。通过合理选择锁类型,可以平衡性能与安全性。