首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ubuntu 2.6.38通用或3.0.0低延迟内核上的一个线程会阻止另一个线程获取mmap_sem?

问为什么ubuntu 2.6.38通用或3.0.0低延迟内核上的一个线程会阻止另一个线程获取mmap_sem?
EN

Stack Overflow用户
提问于 2011-09-14 06:04:39
回答 1查看 279关注 0票数 2

如果我编写一个线程并在循环实时调度器上运行它,在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之间的连接是什么?

EN

回答 1

Stack Overflow用户

发布于 2012-01-17 21:35:13

来自本网站:http://www.icir.org/gregor/tools/pthread-scheduling.html

该线程将与所有其他线程和进程争用CPU。因此,如果您的线程具有更高的优先级并且处于实时调度中,那么它将占用CPU,并且永远不会将其返还。

测试这是否是问题的一种方法是阻塞任何系统调用,这样线程就会休眠,让另一个进程运行。使用带有超时的select应该是一个很好的测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7409115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档