4

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

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

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

4

1 回答 1

6

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

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

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

在具有相关接口的 POSIX 2008 系统上,在没有任何用法或路径名长度限制的情况下openat实现您自己的等价物非常简单,因此您最好自己编写。nftwchdir

于 2012-07-13T01:33:46.967 回答