C / C ++でのnftw()のスレッドセーフな実装はありますか?ドキュメントにはそれが書かれています
「nftw()関数はスレッドセーフである必要はありません。」
マルチスレッドアプリケーションのディレクトリ構造をウォークスルーする再帰削除関数にnftwを使用します。
C / C ++でのnftw()のスレッドセーフな実装はありますか?ドキュメントにはそれが書かれています
「nftw()関数はスレッドセーフである必要はありません。」
マルチスレッドアプリケーションのディレクトリ構造をウォークスルーする再帰削除関数にnftwを使用します。
非スレッドセーフ関数をスレッドセーフにする簡単な方法の1つは、呼び出す前にロックを取得する関数でラップし、常にこのラッパーを介して呼び出すことです。通常、ロックを解除する前に結果をコピーする必要がありますがnftw
、戻った後にコピーする必要のある結果は生成されません。ただし、いくつかの注意点があります。
もちろん、これにより、複数のスレッドがインターフェースを使用する場合のすべての並列処理が防止されます。
ウォークする各ディレクトリに到達nftw
するための1つのオプション。chdir
これはマルチスレッドアプリにとって非常に悪いことです(現在のディレクトリはすべてのスレッドで共有されているため)。したがって、このオプションの使用は避けてください。
および関連するインターフェイスを備えたPOSIX2008システムでは、使用法やパス名の長さの制限なしにopenat
同等のものを実装するのは非常に簡単なので、独自に作成する方がよい場合があります。nftw
chdir