首页 > 解决方案 > readdir_r 弃用的性能影响?

问题描述

当我在新工作站上重新编译 FUSE 文件系统时,我注意到有关readdir_r. 由于readdir不是 MT Safe 并且需要自己的同步,我有点困惑。

我不确定究竟什么不是 MT Safe - 它是readdir单独的还是读取某个目录直到结束的整个过程?似乎该标准试图通过指出readdir如果在不同的目录上调用它是 MT 安全的,但如果您的“程序”是多用户覆盖 FUSE 文件系统,这显然是不安全的假设来证明这一决定的合理性。那么我应该将整个目录读取过程放在关键部分还是单独readdir调用?

老实说,从性能的角度来看,这两种情况对我来说听起来都很糟糕——我的担忧是否有效,或者 Linux 内核中是否存在其他一些瓶颈,使得无论如何都不可能通过多个进程/线程对单个目录执行并行读取?

标签: cmultithreadingthread-safetydeprecatedreaddir

解决方案


在当前的 POSIX.1 规范 (POSIX.1-2008) 中,readdir(3) 不需要是线程安全的。但是,在现代实现(包括 glibc 实现)中,对指定不同目录流的 readdir(3) 的并发调用是线程安全的。

手册页说它是线程安全的(假设您使用的是 glibc,我认为这在 Linux 上是一个公平的假设)——前提是您使用不同的目录——而不是不同的目录。

目录流是 readdir 的 DIR * 参数。


推荐阅读