- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我编写一个线程并在 Round Robyn 实时调度程序上运行它,在 Ubuntu 11.04 中使用随附的 2.6.38 通用内核或来自此 ppa 的可用 3.0.0-9-lowlatency 内核:https://launchpad.net/~abogani/+archive/ppa ,它似乎锁定了命令:获取 key
当 gpg 在后台尝试使用 mlock() 时,它似乎锁定了该命令,据我所知,它需要 mmap_sem。但是,我的测试线程实际上是“什么都不做”,因为它只是一个空的 for 循环。例如,我也没有主动使用 mmap_sem。
在 SMP 机器(4 核,8 逻辑核)上,RR 调度程序上优先级为 50 或更高的单个线程似乎总是锁定 apt-key。较低优先级的返回率大约为 50% 或更少,有时需要几分钟才能返回。
我的这个实时优先级的空循环线程和 mmap_sem 之间有什么联系?
最佳答案
来自本网站:http://www.icir.org/gregor/tools/pthread-scheduling.html
该线程将与所有其他线程和进程争夺 CPU。因此,如果您的线程具有更高的优先级并且处于实时调度状态,它将占用 CPU 并且永远不会归还。
测试这是否是问题所在的一种方法是阻塞任何系统调用,这样您的线程就会休眠并让其他进程运行。使用带超时的选择应该是一个很好的测试。
关于c - 为什么在 ubuntu 2.6.38-generic 或 3.0.0-lowlatency 内核上的一个线程会阻止另一个线程使用 mmap_sem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409115/
我是一名优秀的程序员,十分优秀!