linux 优先级反转之 pthread

pthread是glibc提供的多线程编程,pthread比较常用的线程间同步的锁机制包括 mutex和spinlock。spinlock在用户态直接访问寄存器,实现互斥操作,减少了不必要的系统调用的次数。mutex实现了等待队列,当申请锁的时候,如果该锁已经被占有了,则进行系统调用,将该锁挂起在内核中的等待队列中。pthread的锁机制采用的是futex,futex在内核中是基于rtmutex实现的,所以支持优先级逆转机制。

futex是linux实现锁定和构建高级抽象锁的基本工具。futex是由用户空间一个对齐的整型变量和附在其上的内核空间的等待队列完成。除了多个线程同时竞争锁的少数情况外,基于futex的lock操作是不需要记性代价昂贵的系统调用的。

futex_lock_pi/futex_unlock_pi 是支持优先级继承的用户空间上锁机制。futex_queue是glibc系统调用进入内核的桥梁,通过futex_queue->futex_pi_state->rtmutex,在内核实现优先级继承。


你可能感兴趣的:(linux,pthread,优先级继承)