Previous: Signal Handling, Up: Preparation [Contents][Index]
The GPGME library is mostly thread-safe, and can be used in a multi-threaded environment but there are some requirements for multi-threaded use:
gpgme_check_version
must be called before any
other function in the library, because it initializes the thread
support subsystem in GPGME. To achieve this in
multi-threaded programs, you must synchronize the memory with respect
to other threads that also want to use GPGME. For this, it
is sufficient to call gpgme_check_version
before creating the
other threads using GPGME1.
gpgme_data_t
and gpgme_ctx_t
object must only be
accessed by one thread at a time. If multiple threads want to deal
with the same object, the caller has to make sure that operations on
that object are fully synchronized.
gpgme_wait
. If
multiple threads call this function, the caller must make sure that
all invocations are fully synchronized. It is safe to start
asynchronous operations while a thread is running in gpgme_wait.
gpgme_strerror
is not thread safe. You have to
use gpgme_strerror_r
instead.
At least this is true for
POSIX threads, as pthread_create
is a function that
synchronizes memory with respects to other threads. There are many
functions which have this property, a complete list can be found in
POSIX, IEEE Std 1003.1-2003, Base Definitions, Issue 6, in the
definition of the term “Memory Synchronization”. For other thread
packages other, more relaxed or more strict rules may apply.