<!-- ##### SECTION Title ##### -->
Threads

<!-- ##### SECTION Short_Description ##### -->


<!-- ##### SECTION Long_Description ##### -->
<para>

</para>


<!-- ##### SECTION See_Also ##### -->
<para>

</para>


<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### SECTION Image ##### -->


<!-- ##### MACRO G_THREADS_ENABLED ##### -->
<para>

</para>



<!-- ##### MACRO G_THREADS_IMPL_POSIX ##### -->
<para>

</para>



<!-- ##### MACRO G_THREADS_IMPL_NONE ##### -->
<para>

</para>



<!-- ##### MACRO G_THREAD_ERROR ##### -->
<para>

</para>



<!-- ##### ENUM GThreadError ##### -->
<para>

</para>

@G_THREAD_ERROR_AGAIN: 

<!-- ##### STRUCT GThreadFunctions ##### -->
<para>

</para>

@mutex_new: 
@mutex_lock: 
@mutex_trylock: 
@mutex_unlock: 
@mutex_free: 
@cond_new: 
@cond_signal: 
@cond_broadcast: 
@cond_wait: 
@cond_timed_wait: 
@cond_free: 
@private_new: 
@private_get: 
@private_set: 
@thread_create: 
@thread_yield: 
@thread_join: 
@thread_exit: 
@thread_set_priority: 
@thread_self: 
@thread_equal: 

<!-- ##### FUNCTION g_thread_init ##### -->
<para>

</para>

@vtable: 


<!-- ##### FUNCTION g_thread_supported ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_thread_get_initialized ##### -->
<para>

</para>

@void: 
@Returns: 


<!-- ##### USER_FUNCTION GThreadFunc ##### -->
<para>

</para>

@data: 
@Returns: 


<!-- ##### ENUM GThreadPriority ##### -->
<para>

</para>

@G_THREAD_PRIORITY_LOW: 
@G_THREAD_PRIORITY_NORMAL: 
@G_THREAD_PRIORITY_HIGH: 
@G_THREAD_PRIORITY_URGENT: 

<!-- ##### STRUCT GThread ##### -->
<para>

</para>


<!-- ##### FUNCTION g_thread_create ##### -->
<para>

</para>

@func: 
@data: 
@joinable: 
@error: 
@Returns: 


<!-- ##### FUNCTION g_thread_create_full ##### -->
<para>

</para>

@func: 
@data: 
@stack_size: 
@joinable: 
@bound: 
@priority: 
@error: 
@Returns: 


<!-- ##### FUNCTION g_thread_self ##### -->
<para>

</para>

@void: 
@Returns: 


<!-- ##### FUNCTION g_thread_join ##### -->
<para>

</para>

@thread: 
@Returns: 


<!-- ##### FUNCTION g_thread_set_priority ##### -->
<para>

</para>

@thread: 
@priority: 


<!-- ##### FUNCTION g_thread_yield ##### -->
<para>

</para>



<!-- ##### FUNCTION g_thread_exit ##### -->
<para>

</para>

@retval: 


<!-- ##### FUNCTION g_thread_foreach ##### -->
<para>

</para>

@thread_func: 
@user_data: 


<!-- ##### STRUCT GMutex ##### -->
<para>

</para>


<!-- ##### FUNCTION g_mutex_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_mutex_lock ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_mutex_trylock ##### -->
<para>

</para>

@mutex: 
@Returns: 


<!-- ##### FUNCTION g_mutex_unlock ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_mutex_free ##### -->
<para>

</para>

@mutex: 


<!-- ##### STRUCT GStaticMutex ##### -->
<para>

</para>


<!-- ##### MACRO G_STATIC_MUTEX_INIT ##### -->
<para>

</para>



<!-- ##### FUNCTION g_static_mutex_init ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_static_mutex_lock ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_static_mutex_trylock ##### -->
<para>

</para>

@mutex: 
@Returns: 


<!-- ##### FUNCTION g_static_mutex_unlock ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_static_mutex_get_mutex ##### -->
<para>

</para>

@mutex: 
@Returns: 


<!-- ##### FUNCTION g_static_mutex_free ##### -->
<para>

</para>

@mutex: 


<!-- ##### MACRO G_LOCK_DEFINE ##### -->
<para>

</para>

@name: 


<!-- ##### MACRO G_LOCK_DEFINE_STATIC ##### -->
<para>

</para>

@name: 


<!-- ##### MACRO G_LOCK_EXTERN ##### -->
<para>

</para>

@name: 


<!-- ##### MACRO G_LOCK ##### -->
<para>

</para>

@name: 


<!-- ##### MACRO G_TRYLOCK ##### -->
<para>

</para>

@name: 


<!-- ##### MACRO G_UNLOCK ##### -->
<para>

</para>

@name: 


<!-- ##### STRUCT GStaticRecMutex ##### -->
<para>

</para>


<!-- ##### MACRO G_STATIC_REC_MUTEX_INIT ##### -->
<para>

</para>



<!-- ##### FUNCTION g_static_rec_mutex_init ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_static_rec_mutex_lock ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_static_rec_mutex_trylock ##### -->
<para>

</para>

@mutex: 
@Returns: 


<!-- ##### FUNCTION g_static_rec_mutex_unlock ##### -->
<para>

</para>

@mutex: 


<!-- ##### FUNCTION g_static_rec_mutex_lock_full ##### -->
<para>

</para>

@mutex: 
@depth: 


<!-- ##### FUNCTION g_static_rec_mutex_unlock_full ##### -->
<para>

</para>

@mutex: 
@Returns: 


<!-- ##### FUNCTION g_static_rec_mutex_free ##### -->
<para>

</para>

@mutex: 


<!-- ##### STRUCT GStaticRWLock ##### -->
<para>

</para>


<!-- ##### MACRO G_STATIC_RW_LOCK_INIT ##### -->
<para>

</para>



<!-- ##### FUNCTION g_static_rw_lock_init ##### -->
<para>

</para>

@lock: 


<!-- ##### FUNCTION g_static_rw_lock_reader_lock ##### -->
<para>

</para>

@lock: 


<!-- ##### FUNCTION g_static_rw_lock_reader_trylock ##### -->
<para>

</para>

@lock: 
@Returns: 


<!-- ##### FUNCTION g_static_rw_lock_reader_unlock ##### -->
<para>

</para>

@lock: 


<!-- ##### FUNCTION g_static_rw_lock_writer_lock ##### -->
<para>

</para>

@lock: 


<!-- ##### FUNCTION g_static_rw_lock_writer_trylock ##### -->
<para>

</para>

@lock: 
@Returns: 


<!-- ##### FUNCTION g_static_rw_lock_writer_unlock ##### -->
<para>

</para>

@lock: 


<!-- ##### FUNCTION g_static_rw_lock_free ##### -->
<para>

</para>

@lock: 


<!-- ##### STRUCT GCond ##### -->
<para>

</para>


<!-- ##### FUNCTION g_cond_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_cond_signal ##### -->
<para>

</para>

@cond: 


<!-- ##### FUNCTION g_cond_broadcast ##### -->
<para>

</para>

@cond: 


<!-- ##### FUNCTION g_cond_wait ##### -->
<para>

</para>

@cond: 
@mutex: 


<!-- ##### FUNCTION g_cond_timed_wait ##### -->
<para>

</para>

@cond: 
@mutex: 
@abs_time: 
@Returns: 


<!-- ##### FUNCTION g_cond_free ##### -->
<para>

</para>

@cond: 


<!-- ##### STRUCT GPrivate ##### -->
<para>

</para>


<!-- ##### FUNCTION g_private_new ##### -->
<para>

</para>

@destructor: 
@Returns: 


<!-- ##### FUNCTION g_private_get ##### -->
<para>

</para>

@private_key: 
@Returns: 


<!-- ##### FUNCTION g_private_set ##### -->
<para>

</para>

@private_key: 
@data: 


<!-- ##### STRUCT GStaticPrivate ##### -->
<para>

</para>


<!-- ##### MACRO G_STATIC_PRIVATE_INIT ##### -->
<para>

</para>



<!-- ##### FUNCTION g_static_private_init ##### -->
<para>

</para>

@private_key: 


<!-- ##### FUNCTION g_static_private_get ##### -->
<para>

</para>

@private_key: 
@Returns: 


<!-- ##### FUNCTION g_static_private_set ##### -->
<para>

</para>

@private_key: 
@data: 
@notify: 


<!-- ##### FUNCTION g_static_private_free ##### -->
<para>

</para>

@private_key: 


<!-- ##### STRUCT GOnce ##### -->
<para>

</para>

@status: 
@retval: 

<!-- ##### ENUM GOnceStatus ##### -->
<para>

</para>

@G_ONCE_STATUS_NOTCALLED: 
@G_ONCE_STATUS_PROGRESS: 
@G_ONCE_STATUS_READY: 

<!-- ##### MACRO G_ONCE_INIT ##### -->
<para>

</para>



<!-- ##### MACRO g_once ##### -->
<para>

</para>

@once: 
@func: 
@arg: 


<!-- ##### FUNCTION g_once_init_enter ##### -->
<para>

</para>

@value_location: 
@Returns: 


<!-- ##### FUNCTION g_once_init_leave ##### -->
<para>

</para>

@value_location: 
@initialization_value: 


<!-- ##### FUNCTION g_bit_lock ##### -->
<para>

</para>

@address: 
@lock_bit: 


<!-- ##### FUNCTION g_bit_trylock ##### -->
<para>

</para>

@address: 
@lock_bit: 
@Returns: 


<!-- ##### FUNCTION g_bit_unlock ##### -->
<para>

</para>

@address: 
@lock_bit: 


