我有两个线程,都在同一个核心上运行。我希望当第二个线程和第一个线程要求锁定时,第二个线程只会立即从互斥锁获取锁定,第一个线程应该等待。我想要优先考虑第二线程。
答案 0 :(得分:1)
由于两个线程都在同一个内核上运行,因此它们是带时间的。这意味着在任何给定的时刻,线程A
或线程B
正在执行(或两者都没有)。为了使锁定以您描述的方式偏向,线程A
需要能够预测线程B
的操作,并且如果线程B
是关于的话,则不要获取锁定需要它。这是一种主要的蠕虫病毒。
我的建议是重新考虑你的设计。
答案 1 :(得分:0)
我怀疑是否保证任何特定线程都会在SMP系统中“赢”,所以除非你在单核系统上,否则你不能这样做(它可能会也可能不会在单个系统中运行) -core case,取决于调度程序的工作方式)。
考虑: 而(东西) { 的mutex_lock(); ... 做东西... mutex_unlock(); }
现在,如果我们有两个运行此代码的线程,那么你最终会遇到一个先来“mutex_lock”的人。最有可能的是,持有锁的线程将获胜,因为另一个线程必须首先由sheduler调度,其中运行循环的线程只跳转到循环中的第一条指令。
因此,如果您需要两个线程同步工作,则需要使用某种逐步同步机制,其中一个线程在继续之前等待另一个线程“开始”。有几种方法可以做到这一点,但所有这些都需要使用共享IPC机制的两个线程。
如果你详细解释你的线程在做什么,可能有一个简单的方法来解决问题,或者它可能很复杂......