私は C++ で QT API を使用していますが、QT の経験がない人からも効果的な答えが得られると思います。
QT の XML 処理クラスには setContent() という関数があり、再入不可として指定されています。setContent() を呼び出すと、XML ファイルがメモリに読み込まれ、データ構造として返されます。
私が理解しているように、再入不可の関数は、関数が異なるファイル/オブジェクトを操作するために呼び出されたとしても、複数のスレッドから同時に呼び出すのは安全ではありません。
これに基づいて、私の理解では、これらのスレッドの両方が setContent() 関数に同時にアクセスできないように保護されていない限り、この関数を使用して XML ファイルを開く複数のスレッドを持つことはできないということです。
これは正しいです?もしそうなら、これは直感的にマルチスレッドの問題を引き起こす関数のようには見えないので、API を書くには本当に貧弱な方法のように思えます。さらに、APIによって提供されるミューテックスはまったくありません。
複数のスレッドが異なる XML ファイルを開くマルチスレッド プログラムでこの関数を使用するには、setContent() 関数へのアクセスを処理する最良の方法は何ですか? XML にアクセスするすべてのファイルに含まれるヘッダー ファイルに、独自の extern ミューテックスを作成する必要がありますか?