2013-08-24 62 views
3

as來自非常好的libxml2不是線程安全的,我的問題是(並且我沒有可能檢查出來),有多少內存(粗略數字)丟失到xmlParseFile()以及更重要的是 - 這種內存丟失累積了很多電話xPF()xmlCleanupParser()內存丟失?

+0

我出於某些原因,不能使用valgrind或其他工具 –

+0

在進行libxml2調用時不能鎖定所有其他代碼嗎? –

+1

只需在無限循環中運行'xmlParseFile()',即使累積內存丟失,您也很快就會發現。或者在它們之間延遲1000次運行它,然後查看平臺的進程查看器,查看內存使用情況是否會隨着時間的推移而增加。 –

回答

3

儘管事實上,malloc()free()或任何內存處理實現不一定是線程安全的,但總是存在共享/全局內存的問題。只要它們是隻讀的,對不同線程中的同一文件的文件句柄並不是那麼糟糕。

但是,從libxml2的2.4.7,你也許可以在API級別,使線程安全的,每文檔根單絲:http://www.xmlsoft.org/threads.html

當我看的libxml2 2.9.1的來源,我儘管全球互斥,儘管線程安全已得到充分實施,但還是有原子分配功能。

下載: ftp://xmlsoft.org/libxml2/

+0

感謝您的回答,我將嘗試在OS/2下獲取該線程標記以編譯該lib並強制在我的遺留代碼的所有部分中使用Init-Function。 –

1

繼意-事項提出的意見,並使用唯一的工具,我發現OS2(這個古老的老IBM的操作系統)下檢查內存,有接縫在無差異使用xCP()或選擇不(對我來說)之間的記憶損失。