-1

我有两个线程,都在同一个核心上运行。我希望当第二个线程和第一个线程请求锁时,第二个线程只会立即从互斥锁获得锁,而第一个线程应该等待。我希望这个优先级应该给予第二个线程。

4

2 回答 2

1

由于两个线程都在同一个核心上运行,因此它们是时间分片的。这意味着在任何给定时刻,线程A或线程B都在执行(或两者都不执行)。要使锁以您描述的方式产生偏差,线程A需要能够预测线程的动作,并且如果线程即将需要它,B则推迟获取锁。B这是一个主要的蠕虫罐头。

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

于 2013-01-22T13:31:33.380 回答
0

我怀疑任何特定线程都会在 SMP 系统中“获胜”,所以除非你在单核系统上,否则你不能这样做(它可能会或可能不会在单核情况下工作) ,取决于调度程序的工作方式)。

考虑:while(something) { mutex_lock(); ... 做事... mutex_unlock(); }

现在,如果我们有两个线程运行此代码,您最终将面临谁先获得“mutex_lock”的竞赛。最有可能的是,持有锁的线程将获胜,因为另一个线程必须首先由调度程序调度,其中运行循环的线程只有跳转到循环中的第一条指令。

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

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

于 2013-01-22T13:37:03.663 回答