如何设置从互斥锁获取锁的优先级?

时间:2013-01-22 13:26:40

标签: linux

我有两个线程,都在同一个核心上运行。我希望当第二个线程和第一个线程要求锁定时,第二个线程只会立即从互斥锁获取锁定,第一个线程应该等待。我想要优先考虑第二线程。

2 个答案:

答案 0 :(得分:1)

由于两个线程都在同一个内核上运行,因此它们是带时间的。这意味着在任何给定的时刻,线程A或线程B正在执行(或两者都没有)。为了使锁定以您描述的方式偏向,线程A需要能够预测线程B的操作,并且如果线程B是关于的话,则不要获取锁定需要它。这是一种主要的蠕虫病毒。

我的建议是重新考虑你的设计。

答案 1 :(得分:0)

我怀疑是否保证任何特定线程都会在SMP系统中“赢”,所以除非你在单核系统上,否则你不能这样做(它可能会也可能不会在单个系统中运行) -core case,取决于调度程序的工作方式)。

考虑:     而(东西)     {         的mutex_lock();         ... 做东西...         mutex_unlock();     }

现在,如果我们有两个运行此代码的线程,那么你最终会遇到一个先来“mutex_lock”的人。最有可能的是,持有锁的线程将获胜,因为另一个线程必须首先由sheduler调度,其中运行循环的线程只跳转到循环中的第一条指令。

因此,如果您需要两个线程同步工作,则需要使用某种逐步同步机制,其中一个线程在继续之前等待另一个线程“开始”。有几种方法可以做到这一点,但所有这些都需要使用共享IPC机制的两个线程。

如果你详细解释你的线程在做什么,可能有一个简单的方法来解决问题,或者它可能很复杂......