



@deftypefun {int} {gnutls_global_init} ( @var{void})

This function performs any required precalculations, detects
the supported CPU capabilities and initializes the underlying
cryptographic backend. In order to free any resources 
taken by this call you should @code{gnutls_global_deinit()}  
when gnutls usage is no longer needed.

This function increments a global counter, so that
@code{gnutls_global_deinit()}  only releases resources when it has been
called as many times as @code{gnutls_global_init()} .  This is useful when
GnuTLS is used by more than one library in an application.  This
function can be called many times, but will only do something the
first time.

Note!  This function is not thread safe.  If two threads call this
function simultaneously, they can cause a race between checking
the global counter and incrementing it, causing both threads to
execute the library initialization code.  That could lead to a
memory leak or even a crash.  To handle this, your application should 
invoke this function after aquiring a thread mutex.  

@strong{Returns:} On success, @code{GNUTLS_E_SUCCESS}  (0) is returned,
otherwise a negative error code is returned.
@end deftypefun
