Threads

Threads — thread abstraction; including threads, different mutexes, conditions and thread private data

Synopsis

#include <glib.h>

#define             G_THREADS_ENABLED
#define             G_THREADS_IMPL_POSIX
#define             G_THREADS_IMPL_NONE

#define             G_THREAD_ERROR
enum                GThreadError;

                    GThreadFunctions;
void                g_thread_init                       (GThreadFunctions *vtable);
gboolean            g_thread_supported                  ();
gboolean            g_thread_get_initialized            (void);

gpointer            (*GThreadFunc)                      (gpointer data);
enum                GThreadPriority;
                    GThread;
GThread *           g_thread_create                     (GThreadFunc func,
                                                         gpointer data,
                                                         gboolean joinable,
                                                         GError **error);
GThread*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,
                                                         GThreadPriority priority);
void                g_thread_yield                      ();
void                g_thread_exit                       (gpointer retval);
void                g_thread_foreach                    (GFunc thread_func,
                                                         gpointer user_data);

                    GMutex;
GMutex *            g_mutex_new                         ();
void                g_mutex_lock                        (GMutex *mutex);
gboolean            g_mutex_trylock                     (GMutex *mutex);
void                g_mutex_unlock                      (GMutex *mutex);
void                g_mutex_free                        (GMutex *mutex);

                    GStaticMutex;
#define             G_STATIC_MUTEX_INIT
void                g_static_mutex_init                 (GStaticMutex *mutex);
void                g_static_mutex_lock                 (GStaticMutex *mutex);
gboolean            g_static_mutex_trylock              (GStaticMutex *mutex);
void                g_static_mutex_unlock               (GStaticMutex *mutex);
GMutex *            g_static_mutex_get_mutex            (GStaticMutex *mutex);
void                g_static_mutex_free                 (GStaticMutex *mutex);

#define             G_LOCK_DEFINE                       (name)
#define             G_LOCK_DEFINE_STATIC                (name)
#define             G_LOCK_EXTERN                       (name)
#define             G_LOCK                              (name)
#define             G_TRYLOCK                           (name)
#define             G_UNLOCK                            (name)

                    GStaticRecMutex;
#define             G_STATIC_REC_MUTEX_INIT
void                g_static_rec_mutex_init             (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock             (GStaticRecMutex *mutex);
gboolean            g_static_rec_mutex_trylock          (GStaticRecMutex *mutex);
void                g_static_rec_mutex_unlock           (GStaticRecMutex *mutex);
void                g_static_rec_mutex_lock_full        (GStaticRecMutex *mutex,
                                                         guint depth);
guint               g_static_rec_mutex_unlock_full      (GStaticRecMutex *mutex);
void                g_static_rec_mutex_free             (GStaticRecMutex *mutex);

                    GStaticRWLock;
#define             G_STATIC_RW_LOCK_INIT
void                g_static_rw_lock_init               (GStaticRWLock *lock);
void                g_static_rw_lock_reader_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_reader_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_reader_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_writer_lock        (GStaticRWLock *lock);
gboolean            g_static_rw_lock_writer_trylock     (GStaticRWLock *lock);
void                g_static_rw_lock_writer_unlock      (GStaticRWLock *lock);
void                g_static_rw_lock_free               (GStaticRWLock *lock);

                    GCond;
GCond*              g_cond_new                          ();
void                g_cond_signal                       (read*            g_thread_create_full                (GThreadFunc func,
                                                         gpointer data,
                                                         gulong stack_size,
                                                         gboolean joinable,
                                                         gboolean bound,
                                                         GThreadPriority priority,
                                                         GError **error);
GThread*            g_thread_self                       (void);
gpointer            g_thread_join                       (GThread *thread);
void                g_thread_set_priority               (GThread *thread,