c++ - 非阻塞 mlock()

标签 c++ c linux file-io

有没有非阻塞的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/

相关文章:

c - #line - 目的?

c - C 程序如何在幕后传递参数?

python 守护进程被杀死(被内核?)

java - 在 linux 中设置 java_home 和 path 环境变量

c - 检测 Linux 上正在运行的进程的内存泄漏

c++ - 为什么静态指针返回函数中有 "static"关键字?

c++ - 重新声明异常参数

c++ - 将 const char * const 参数的成员分配给新值

c - 从字符串元素中取值并将取值与两位数相加

c++ - 内存管理和 std::allocator