mul*_*lle 3 c recursion thread-safety delete-file nftw
在C/C++中是否有任何线程安全的nftw()实现?在文档中说
"nftw()函数不一定是线程安全的."
我将使用nftw作为递归删除函数来遍历多线程应用程序中的目录结构.
使线程安全的非线程安全函数的一个简单方法是将它包装在一个函数中,该函数在调用它之前获得一个锁,并始终通过这个包装器调用它.通常,您需要在解锁之前复制结果,但nftw不会产生任何在返回后需要复制的结果.但有几点需要注意:
当多个线程想要使用接口时,这当然会阻止所有并行性.
一个选项,nftw使它chdir到它走的每个目录.对于多线程应用程序来说这是一件非常糟糕的事情(因为当前目录由所有线程共享),因此您应该避免使用此选项.
在具有openat相关接口的POSIX 2008系统上,实现您自己的等效而nftw没有任何chdir使用或路径名长度限制是非常简单的,因此您可能最好只编写自己的.