Linux互斥优先级继承

Linux互斥优先级继承,linux,multithreading,Linux,Multithreading,我正在使用Linux互斥来保护多线程应用程序中的共享数据。 为了防止优先级反转,我使用PTHREAD_PRIO_INHERIT protocol()。 我的系统有三个线程: 线程1:低优先级,首先获取互斥体 线程2:与线程1具有相同的优先级。无法访问共享数据。 线程3:高优先级。在线程1之后获取互斥 假设先创建并运行线程1,然后它将锁定共享数据。 然后,线程3创建并运行,在一毫秒后,它获取线程1所拥有的锁。因此线程3被阻塞。 在PTHREAD_PRIO_INHERIT协议中,线程1的优先级将提高

我正在使用Linux互斥来保护多线程应用程序中的共享数据。 为了防止优先级反转,我使用PTHREAD_PRIO_INHERIT protocol()。
我的系统有三个线程:
线程1:低优先级,首先获取互斥体
线程2:与线程1具有相同的优先级。无法访问共享数据。
线程3:高优先级。在线程1之后获取互斥

假设先创建并运行线程1,然后它将锁定共享数据。
然后,线程3创建并运行,在一毫秒后,它获取线程1所拥有的锁。因此线程3被阻塞。
在PTHREAD_PRIO_INHERIT协议中,线程1的优先级将提高到线程3的优先级。
线程1释放锁后,线程3将运行并完成。
所以,我的问题是:下一个运行哪个线程,线程1还是线程2

有人帮忙吗?

根据:

如果互斥对象引用的互斥对象上有线程被阻止 调用
pthread\u mutex\u unlock()
时,会产生互斥 在可用时,调度策略应确定哪个线程 应获取互斥

这句话实际上是说,实现可以自由地唤醒它想要唤醒的任何线程

但是,对于Linux,可以在以下位置找到计划程序策略:

注意,Linux手册页根本没有提到互斥体


如果您的代码依赖于特定的唤醒顺序,那么使用一个简单的互斥对象是错误的同步对象。

谢谢。但是,在我的问题中,线程1和线程2不再被互斥锁阻塞。它们在就绪队列中,等待线程3完成。我的问题是:在线程1将互斥释放到线程3之后,线程1在就绪队列中的哪个位置被替换(在线程2之前还是在线程2之后)?