gpt4 book ai didi

c++ - 当另一个线程正在读/写 fd 时,我可以调用 posix_fadvise 吗?

转载 作者:太空狗 更新时间:2023-10-29 23:03:37 30 4
gpt4 key购买 nike

我在linux下做一个项目,需要使用多线程读/写同一个fd。我想使用 posix_fadvise 来释放页面缓存。

当另一个线程正在读取或写入同一个 fd 时,我可以调用 posix_fadvise 吗?

最佳答案

阅读posix_fadvise(2)syscalls(2) .自 posix_fadvise是正品syscall (例如包装 fadvise64__NR_fadvise64 中包含其 <asm/unistd.h> ...)您应该能够在另一个线程正在写入相同的 fd 时调用它,就像您可能有两个线程在执行 write(2) 一样到相同的文件描述符(但随后发生的事情可能是不确定的)。

我想内核正在内部锁定文件描述符引用的内核文件对象。

顺便说一下,posix_advise 的手册页告诉:

  Programs can use posix_fadvise() to announce an intention to access
file data in a specific pattern in the future, thus allowing the
kernel to perform appropriate optimizations.
   The advice applies to a (not necessarily existent) region starting at
offset and extending for len bytes (or until the end of the file if
len is 0) within the file referred to by fd. The advice is not
binding; it merely constitutes an expectation on behalf of the
application.

因此我猜测内核可能遵循posix_fadvise稍后(或根本不)...

所以我认为你可以这样做,但我相信你应该避免,至少出于可读性的原因(并且因为非确定性),让多个线程在同一个文件描述符上工作。我的感觉是您的代码可能有一些设计问题,但可能会发生一些事情...

通常,我会避免让多个线程在同一个文件描述符上执行 I/O(或者至少,使用 pwrite(2) 或使用互斥锁锁定 I/O...)。因此,虽然您可以按照您的要求去做,但我会避免那样做。

请记住,对磁盘文件系统的 I/O 操作比普通计算要慢得多(它们可能需要很多毫秒)。用互斥量锁定它们应该没有什么意义,并且会给你更多的确定性。

关于c++ - 当另一个线程正在读/写 fd 时,我可以调用 posix_fadvise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028592/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com