本處經驗很簡單,但是確實是困擾我們一個星期的問題。感謝解決該問題的同仁愿意將此經驗共享出來,以方便后來者。
libxml++是在linux平臺下,C++語言工具里一個比較方便、易用的xml工具。雖然其功能不如xerces強大,但是其也有體積小,兼容libxml2的優勢。眾所周知,libxml2是linux平臺下C語言中大量應用的xml工具,幾乎是這方面的標準。
不過盡管libxml++文檔也算豐富,但是其在多線程下是否正確,之前還真未測試。
在實際項目中的經驗發現,libxml++還是多線程安全的。只不過對其使用方式上要注意。一開始在項目中,我們是在子進程中用dlopen打開libxml++的,發現會出現一些莫名其妙的問題,比如,libxml++報告無法找到根節點。眾所周知,在libxml++中,無法找到根節點的情況非常少見,基本沒有,所以懷疑其線程安全。后來通過調試和觀察,發現其他地方使用libxml++的時候都是通過編譯器靜態鏈接進來的,隨懷疑其是由于子進程中進行的動態庫載入才會出現問題。改在主進程中進行動態載入,問題解除。
像這種開源的代碼,恐怕作者非常清楚其線程安全性和使用注意事項。但是畢竟是開源產品,其文檔并未寫明,示例代碼也非常簡單。再評估期,由于種種原因,也沒有做如此深入的評估。后期隨著該工具應用的逐步深入,他是否會體力不支?這都是無法預測。所幸,libxml++現在看來還是非常健壯的。:)
libxml++是在linux平臺下,C++語言工具里一個比較方便、易用的xml工具。雖然其功能不如xerces強大,但是其也有體積小,兼容libxml2的優勢。眾所周知,libxml2是linux平臺下C語言中大量應用的xml工具,幾乎是這方面的標準。
不過盡管libxml++文檔也算豐富,但是其在多線程下是否正確,之前還真未測試。
在實際項目中的經驗發現,libxml++還是多線程安全的。只不過對其使用方式上要注意。一開始在項目中,我們是在子進程中用dlopen打開libxml++的,發現會出現一些莫名其妙的問題,比如,libxml++報告無法找到根節點。眾所周知,在libxml++中,無法找到根節點的情況非常少見,基本沒有,所以懷疑其線程安全。后來通過調試和觀察,發現其他地方使用libxml++的時候都是通過編譯器靜態鏈接進來的,隨懷疑其是由于子進程中進行的動態庫載入才會出現問題。改在主進程中進行動態載入,問題解除。
像這種開源的代碼,恐怕作者非常清楚其線程安全性和使用注意事項。但是畢竟是開源產品,其文檔并未寫明,示例代碼也非常簡單。再評估期,由于種種原因,也沒有做如此深入的評估。后期隨著該工具應用的逐步深入,他是否會體力不支?這都是無法預測。所幸,libxml++現在看來還是非常健壯的。:)