我已經在C++中使用QT API,但我想如果答案可以有效地從沒有任何QT經驗的人那裏得到。在多線程程序中使用的API中的非重入函數
QT在它的XML處理類中有一個名爲setContent()的函數,它被指定爲不可重入。被調用時,setContent()將XML文件讀入內存,並將其作爲數據結構返回。
據我所知,一個非重入函數是一個不安全的調用多線程,即使該函數被調用來操作不同的文件/對象。
因此,基於此,我的理解是,我將無法使用此函數打開多個線程來打開XML文件,除非這些線程同時受到保護而不能同時訪問setContent()函數。
這是正確的嗎?如果是這樣,似乎是編寫API的一個非常糟糕的方式,因爲這看起來並不像一個直覺上會引發多線程問題的函數。另外,the API沒有提供互斥體。
所以爲了在我的多線程程序中使用這個函數,其中多個線程將打開不同的XML文件,處理對setContent()函數的訪問的最佳方法是什麼?我是否應該在每個將訪問XML的文件中包含的頭文件中創建一個extern互斥量?