Linux 内核各类锁

原子操作:atomic

自旋锁:如果进线程无法取得锁,进线程不会立刻放弃CPU时间片,而是一直申请CPU时间片轮询自旋锁,直到获取为止,一般应用于加锁时间很短(1ms左右或更低)的场景。


互斥锁:无法获取琐时,进线程立刻放弃剩余的时间片并进入阻塞(或者说挂起)状态,同时保存寄存器和程序计数器的内容(保存现场,上下文切换的前半部分),当可以获取锁时,进线程激活,等待被调度进CPU并恢复现场(上下文切换下半部分)

上下文切换会带来数十微秒的开销,不要在性能敏感的地方用互斥锁

读写锁:写锁被占用时,所有申请读锁和写锁的进线程都会被阻塞,读锁被占用时,申请写锁的进线程被阻塞,其他申请读锁的进线程不会。

读写自旋锁:同时集成自旋锁和读写锁的优点,tbb库提供该锁。

你可能感兴趣的:(Linux 内核各类锁)