有没有非阻塞的mlock()这样的东西?在交通繁忙的情况下,我不希望我的线程阻塞等待 I/O。我宁愿使用 mlock() 告诉 Linux 内核我需要从 mmap() 生成的文件中的哪个区域,然后在获取页面时得到通知。 (据我所知,标准的 mlock() 调用是阻塞的。)
最佳答案
mlock
接口(interface)似乎没有你想要的任何内置功能,所以我认为实现它的唯一方法是使用单独的线程来执行 mlock
并让该线程在 mlock
返回时通知您(通过条件变量、信号量或其他机制)。显然这会产生一些开销,但如果您的目标是获得实时延迟保证而不是改善整体运行时/平均延迟,这仍然是一个明显的胜利。
当然,除非您使用 mlockall
,否则很难做出任何实时假设,因为您的代码可能会被换出。因此,使用 mlockall
和 POSIX AIO(或类似但更清晰的 API 系统,自己根据线程实现)进行读取而不是使用 mmap
可能更有意义。然后,您就可以严格保证,一旦您的数据被获取,就无法将其换出。
关于c++ - 非阻塞 mlock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24939931/