答案 0 :(得分:5)
使线程安全的非线程安全函数的一个简单方法是将其包装在一个函数中,该函数在调用之前获取一个锁,并始终通过此包装器调用它。通常,您需要在解锁之前复制结果,但nftw
不会产生任何在返回后需要复制的结果。但有几点需要注意:
当多个线程想要使用该接口时,这当然会阻止所有并行性。
nftw
的一个选项使其chdir
到达它所走的每个目录。对于多线程应用程序来说这是一件非常糟糕的事情(因为当前目录由所有线程共享),所以你应该避免使用这个选项。
在具有openat
及相关接口的POSIX 2008系统上,实现您自己的等效nftw
而没有任何chdir
用法或路径名长度限制非常简单,因此您可能会更好只写自己的。