- 原子操作atomic
- 自旋锁spin_lock
- 信号量semaphore
- 互斥信号量mutex
- 读写锁rw_lock
- RCU(ReadCopyUpdate)
- seqlock
- atomic在操作执行完毕前不会被任何事务打断,是最小的执行单元,不可能有比它更小的执行单元
- 通常用于实现资源的引用计数
- 持锁时间一般比较短,持锁期间是抢占失效的
- 不会引起调用者休眠(busy-waiting)
- 不可重入,适用于任何上下文
- 内核中的信号量在概念和原理上和用户态的System V的IPC机制是一样的
- 持锁时间一般比较长,持锁期间是可以被抢占的
- 适用于进程上下文
- 信号量用于线程的同步
- 加锁和解锁可以被不同线程操作
- 唯一排它
- 用于线程的互斥
- 信号量在创建时设置的初始值为1就是mutex
- 加锁和解锁是被同一个线程操作
互斥用于线程的互斥,信号量用于线程的同步
- 对访问分为读和写
- 相对于spin_lock有更好的并发性(可多读锁,每个逻辑cpu可已有一个)
- 共享资源大部分以读为主,写少
- RCU保护的代码也不允许进入睡眠
- 是rw_lock的改进,读不需要锁,无同步开销
- 允许多读者和多写者,读无同步开销,写同步开销大
- 受保护的资源必须用指针访问
- 对rw_lock的优化,读者可以在写者操作是访问,不必等待写者操作完成
- 要求被保护的临界资源不包含指针,因为写者可能使指针失效,而读者去访问可能造成错误