threads.pod 2.2 KB
Newer Older
U
Ulf Möller 已提交
1 2 3 4
=pod

=head1 NAME

5 6
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
U
Ulf Möller 已提交
7 8 9 10 11

=head1 SYNOPSIS

 #include <openssl/crypto.h>

12 13 14 15 16 17 18
 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);
19

U
Ulf Möller 已提交
20 21
=head1 DESCRIPTION

22 23 24 25 26 27 28 29
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:
30 31 32 33

=over 4

=item *
34 35
CRYPTO_THREAD_lock_new() allocates, initializes and returns a new read/write
lock.
36 37

=item *
38
CRYPTO_THREAD_read_lock() locks the provided B<lock> for reading.
39 40

=item *
41
CRYPTO_THREAD_write_lock() locks the provided B<lock> for writing.
42 43

=item *
44
CRYPTO_THREAD_unlock() unlocks the previously locked B<lock>.
45

46
=item *
47
CRYPTO_THREAD_lock_frees() frees the provided B<lock>.
48 49

=item *
50 51 52 53 54
CRYPTO_atomic_add() atomically adds B<amount> to B<val> and returns the
result of the operation in B<ret>. B<lock> 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.
55

56 57
=back

58
=head1 RETURN VALUES
U
Ulf Möller 已提交
59

60
CRYPTO_THREAD_lock_new() returns the allocated lock, or NULL on error.
61

62
CRYPTO_THREAD_lock_frees() returns no value.
63

64
The other functions return 1 on success or 0 on error.
U
Ulf Möller 已提交
65

66
=head1 NOTES
U
Ulf Möller 已提交
67 68 69 70 71

You can find out if OpenSSL was configured with thread support:

 #define OPENSSL_THREAD_DEFINES
 #include <openssl/opensslconf.h>
72
 #if defined(OPENSSL_THREADS)
U
Ulf Möller 已提交
73 74 75 76 77 78 79
   // thread support enabled
 #else
   // no thread support
 #endif

=head1 SEE ALSO

R
Rich Salz 已提交
80
L<crypto(3)>
U
Ulf Möller 已提交
81 82

=cut