我在 C++ 中使用 QT API,但我想答案可以有效地来自没有任何 QT 经验的人。
QT 在其 XML 处理类中有一个名为 setContent() 的函数,它被指定为不可重入的。调用时,setContent() 将 XML 文件读入内存,并将其作为数据结构返回。
据我了解,不可重入函数是从多个线程同时调用的不安全的函数,即使调用该函数以对不同的文件/对象进行操作也是如此。
因此,基于此,我的理解是,除非以某种方式保护这两个线程不能同时访问 setContent() 函数,否则我将无法拥有多个使用此函数打开 XML 文件的线程。
它是否正确?如果是这样,编写 API 似乎是一种非常糟糕的方式,因为这看起来根本不像是一个直观地会引发多线程问题的函数。此外,API根本不提供互斥锁。
因此,为了在我的多线程程序中使用此函数,其中多个线程将打开不同的 XML 文件,处理对 setContent() 函数的访问的最佳方法是什么?我应该在每个将访问 XML 的文件中包含的头文件中自己创建一个外部互斥锁吗?