Starting with 2.4.7, libxml2 makes provisions to ensure that concurrent
threads can safely work in parallel parsing different documents. There is
however a couple of things to do to ensure it:
- configure the library accordingly using the --with-threads options
- call xmlInitParser() in the "main" thread before using any of the
libxml2 API (except possibly selecting a different memory allocator)
Note that the thread safety cannot be ensured for multiple threads sharing
the same document, the locking must be done at the application level, libxml
exports a basic mutex and reentrant mutexes API in <libxml/threads.h>.
The parts of the library checked for thread safety are:
- concurrent loading
- file access resolution
- catalog access
- catalog building
- entities lookup/accesses
- validation
- global variables per-thread override
- memory handling
XPath has been tested for threaded usage on non-modified document
for example when using libxslt, but make 100% sure the documents
are accessed read-only ! Daniel Veillard |