nftw线程安全

时间:2012-07-13 01:08:48

标签: c recursion thread-safety delete-file nftw

C / C ++中是否存在nftw()的线程安全实现?在文档中说

  

“nftw()函数不一定是线程安全的。”

我将使用nftw作为递归删除函数来遍历多线程应用程序中的目录结构。

1 个答案:

答案 0 :(得分:5)

使线程安全的非线程安全函数的一个简单方法是将其包装在一个函数中,该函数在调用之前获取一个锁,并始终通过此包装器调用它。通常,您需要在解锁之前复制结果,但nftw不会产生任何在返回后需要复制的结果。但有几点需要注意:

  1. 当多个线程想要使用该接口时,这当然会阻止所有并行性。

  2. nftw的一个选项使其chdir到达它所走的每个目录。对于多线程应用程序来说这是一件非常糟糕的事情(因为当前目录由所有线程共享),所以你应该避免使用这个选项。

  3. 在具有openat及相关接口的POSIX 2008系统上,实现您自己的等效nftw而没有任何chdir用法或路径名长度限制非常简单,因此您可能会更好只写自己的。