如果我编写一个线程并在循环实时调度器上运行它,在Ubuntu11.04中使用附带的2.6.38通用内核或从ppa:https://launchpad.net/~abogani/+archive/ppa获得的3.0.0-9低延迟内核,它似乎锁定了命令: apt-key get
当gpg在幕后试图使用mlock()时,它似乎锁定了该命令,据我所知,mlock()需要mmap_sem。然而,我的测试线程实际上是“什么也不做”,因为它只是一个空的for循环。例如,我也没有主动使用mmap_sem。
在SMP机器(4个核心,8个逻辑核心)上,RR调度程序中优先级为50或更高的单个线程似乎总是锁定apt-key。较低的优先级返回大约50%或更少的时间,有时需要几分钟才能返回。
处于此实时优先级的空循环线程与mmap_sem之间的连接是什么?
发布于 2012-01-17 21:35:13
来自本网站:http://www.icir.org/gregor/tools/pthread-scheduling.html
该线程将与所有其他线程和进程争用CPU。因此,如果您的线程具有更高的优先级并且处于实时调度中,那么它将占用CPU,并且永远不会将其返还。
测试这是否是问题的一种方法是阻塞任何系统调用,这样线程就会休眠,让另一个进程运行。使用带有超时的select应该是一个很好的测试。
https://stackoverflow.com/questions/7409115
复制相似问题