threads: interfaces for thread handling

## threads

threads - interfaces for thread handling

set of generic threading related routines should work with pthreads, Windows native or TLS threads

Author(s): Daniel Veillard

## Synopsis

    typedef struct _xmlMutex xmlMutex;
    typedef struct _xmlRMutex xmlRMutex;
    typedef xmlRMutex * xmlRMutexPtr;
    typedef xmlMutex * xmlMutexPtr;
    void	xmlFreeRMutex			(xmlRMutexPtr tok);
    int	xmlGetThreadId			(void);
    void	xmlMutexUnlock			(xmlMutexPtr tok);
    void	xmlCleanupThreads		(void);
    void	xmlLockLibrary			(void);
    xmlRMutexPtr	xmlNewRMutex		(void);
    void	xmlMutexLock			(xmlMutexPtr tok);
    int	xmlIsMainThread			(void);
    void	xmlRMutexUnlock			(xmlRMutexPtr tok);
    xmlGlobalStatePtr	xmlGetGlobalState	(void);
    xmlMutexPtr	xmlNewMutex		(void);
    int	xmlDllMain			(void * hinstDLL,
    					 unsigned long fdwReason,
    					 void * lpvReserved);
    void	xmlFreeMutex			(xmlMutexPtr tok);
    void	xmlUnlockLibrary		(void);
    void	xmlInitThreads			(void);
    void	xmlRMutexLock			(xmlRMutexPtr tok);

## Description

## Details

### Structure xmlMutex

    struct _xmlMutex {
    The content of this structure is not made public by the API.
    } xmlMutex;

### Typedef xmlMutexPtr

    xmlMutex * xmlMutexPtr;

### Structure xmlRMutex

    struct _xmlRMutex {
    The content of this structure is not made public by the API.
    } xmlRMutex;

### Typedef xmlRMutexPtr

    xmlRMutex * xmlRMutexPtr;

### xmlCleanupThreads ()

    void	xmlCleanupThreads		(void)

xmlCleanupThreads() is used to to cleanup all the thread related data of the libxml2 library once processing has ended.

### xmlDllMain ()

    int	xmlDllMain			(void * hinstDLL,
    					 unsigned long fdwReason,
    					 void * lpvReserved)

`hinstDLL`: |
`fdwReason`: |
`lpvReserved`: |
`Returns`: |

### xmlFreeMutex ()

    void	xmlFreeMutex			(xmlMutexPtr tok)

xmlFreeMutex() is used to reclaim resources associated with a libxml2 token struct.

`tok`: | the simple mutex

### xmlFreeRMutex ()

    void	xmlFreeRMutex			(xmlRMutexPtr tok)

xmlRFreeMutex() is used to reclaim resources associated with a reentrant mutex.

`tok`: | the reentrant mutex

### xmlGetGlobalState ()

    xmlGlobalStatePtr	xmlGetGlobalState	(void)

xmlGetGlobalState() is called to retrieve the global state for a thread.

`Returns`: | the thread global state or NULL in case of error

### xmlGetThreadId ()

    int	xmlGetThreadId			(void)

xmlGetThreadId() find the current thread ID number

`Returns`: | the current thread ID number

### xmlInitThreads ()

    void	xmlInitThreads			(void)

xmlInitThreads() is used to to initialize all the thread related data of the libxml2 library.

### xmlIsMainThread ()

    int	xmlIsMainThread			(void)

xmlIsMainThread() check whether the current thread is the main thread.

`Returns`: | 1 if the current thread is the main thread, 0 otherwise

### xmlLockLibrary ()

    void	xmlLockLibrary			(void)

xmlLockLibrary() is used to take out a re-entrant lock on the libxml2 library.

### xmlMutexLock ()

    void	xmlMutexLock			(xmlMutexPtr tok)

xmlMutexLock() is used to lock a libxml2 token.

`tok`: | the simple mutex

### xmlMutexUnlock ()

    void	xmlMutexUnlock			(xmlMutexPtr tok)

xmlMutexUnlock() is used to unlock a libxml2 token.

`tok`: | the simple mutex

### xmlNewMutex ()

    xmlMutexPtr	xmlNewMutex		(void)

xmlNewMutex() is used to allocate a libxml2 token struct for use in synchronizing access to data.

`Returns`: | a new simple mutex pointer or NULL in case of error

### xmlNewRMutex ()

    xmlRMutexPtr	xmlNewRMutex		(void)

xmlRNewMutex() is used to allocate a reentrant mutex for use in synchronizing access to data. token_r is a re-entrant lock and thus useful for synchronizing access to data structures that may be manipulated in a recursive fashion.

`Returns`: | the new reentrant mutex pointer or NULL in case of error

### xmlRMutexLock ()

    void	xmlRMutexLock			(xmlRMutexPtr tok)

xmlRMutexLock() is used to lock a libxml2 token_r.

`tok`: | the reentrant mutex

### xmlRMutexUnlock ()

    void	xmlRMutexUnlock			(xmlRMutexPtr tok)

xmlRMutexUnlock() is used to unlock a libxml2 token_r.

`tok`: | the reentrant mutex

### xmlUnlockLibrary ()

    void	xmlUnlockLibrary		(void)

xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2 library.