有没有非阻塞mlock()这样的东西?在繁重的通信量下,我不希望线程阻塞等待I/O。我宁愿使用mlock()从mmap()文件中告诉Linux内核我需要哪个区域,然后在获取页面时得到通知。(据我所知,标准的mlock()调用是阻塞的。)

最佳答案

mlock接口似乎没有任何您想要的内置功能,因此我认为实现它的唯一方法是使用单独的线程来执行mlock,并在mlock返回时让该线程(通过条件变量、信号量或其他机制)通知您。显然这会带来一些开销,但是如果您的目标是获得实时延迟保证,而不是改善总体运行时/平均延迟,那么这仍然是一个明显的胜利。
当然,除非您使用mlockall,否则很难做出任何实时假设,因为您的代码可能会被替换掉。因此,使用mlockall和posix aio(或者用线程自己实现的类似但更干净的api系统)进行读操作,而不是使用mmap可能更有意义。然后你就有了一个硬保证,一旦你的数据被取回,它就不能被交换出去。

10-05 21:28