=pod =head1 NAME CRYPTO_THREAD_lock_new, CRYPTO_THREAD_read_lock, CRYPTO_THREAD_write_lock, CRYPTO_THREAD_unlock, CRYPTO_THREAD_lock_free, CRYPTO_atomic_add - OpenSSL thread support =head1 SYNOPSIS #include CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); =head1 DESCRIPTION OpenSSL can be safely used in multi-threaded applications provided that support for the underlying OS threading API is built-in. Currently, OpenSSL supports the pthread and Windows APIs. OpenSSL can also be built without any multi-threading support, for example on platforms that don't provide any threading support or that provide a threading API that is not yet supported by OpenSSL. The following multi-threading function are provided: =over 4 =item * CRYPTO_THREAD_lock_new() allocates, initializes and returns a new read/write lock. =item * CRYPTO_THREAD_read_lock() locks the provided B for reading. =item * CRYPTO_THREAD_write_lock() locks the provided B for writing. =item * CRYPTO_THREAD_unlock() unlocks the previously locked B. =item * CRYPTO_THREAD_lock_frees() frees the provided B. =item * CRYPTO_atomic_add() atomically adds B to B and returns the result of the operation in B. B will be locked, unless atomic operations are supported on the specific platform. Because of this, if a variable is modified by CRYPTO_atomic_add() then CRYPTO_atomic_add() must be the only way that the variable is modified. =back =head1 RETURN VALUES CRYPTO_THREAD_lock_new() returns the allocated lock, or NULL on error. CRYPTO_THREAD_lock_frees() returns no value. The other functions return 1 on success or 0 on error. =head1 NOTES You can find out if OpenSSL was configured with thread support: #define OPENSSL_THREAD_DEFINES #include #if defined(OPENSSL_THREADS) // thread support enabled #else // no thread support #endif =head1 SEE ALSO L =cut