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