<!-- ##### SECTION Title ##### -->
Asynchronous Queues

<!-- ##### SECTION Short_Description ##### -->
asynchronous communication between threads

<!-- ##### SECTION Long_Description ##### -->
<para>
Often you need to communicate between different threads. In general
it's safer not to do this by shared memory, but by explicit message
passing. These messages only make sense asynchronously for
multi-threaded applications though, as a synchronous operation could as
well be done in the same thread.
</para>

<para>
Asynchronous queues are an exception from most other GLib data
structures, as they can be used simultaneously from multiple threads
without explicit locking and they bring their own builtin reference
counting. This is because the nature of an asynchronous queue is that
it will always be used by at least 2 concurrent threads.
</para>

<para>
For using an asynchronous queue you first have to create one with
g_async_queue_new(). A newly-created queue will get the reference
count 1. Whenever another thread is creating a new reference of (that
is, pointer to) the queue, it has to increase the reference count
(using g_async_queue_ref()). Also, before removing this reference, the
reference count has to be decreased (using
g_async_queue_unref()). After that the queue might no longer exist so
you must not access it after that point.
</para>

<para>
A thread, which wants to send a message to that queue simply calls
g_async_queue_push() to push the message to the queue.
</para>

<para>
A thread, which is expecting messages from an asynchronous queue
simply calls g_async_queue_pop() for that queue. If no message is
available in the queue at that point, the thread is now put to sleep
until a message arrives. The message will be removed from the queue
and returned. The functions g_async_queue_try_pop() and
g_async_queue_timed_pop() can be used to only check for the presence
of messages or to only wait a certain time for messages respectively.
</para>

<para>
For almost every function there exist two variants, one that locks the
queue and one that doesn't. That way you can hold the queue lock
(acquire it with g_async_queue_lock() and release it with
g_async_queue_unlock()) over multiple queue accessing
instructions. This can be necessary to ensure the integrity of the
queue, but should only be used when really necessary, as it can make
your life harder if used unwisely. Normally you should only use the
locking function variants (those without the suffix _unlocked)
</para>

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

</para>

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


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


<!-- ##### STRUCT GAsyncQueue ##### -->
<para>
The #GAsyncQueue struct is an opaque data structure, which represents
an asynchronous queue. It should only be accessed through the
<function>g_async_queue_*</function> functions.
</para>


<!-- ##### FUNCTION g_async_queue_new ##### -->


@void: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_new_full ##### -->
<para>

</para>

@item_free_func: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_ref ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_unref ##### -->


@queue: 


<!-- ##### FUNCTION g_async_queue_push ##### -->


@queue: 
@data: 


<!-- ##### FUNCTION g_async_queue_push_sorted ##### -->
<para>

</para>

@queue: 
@data: 
@func: 
@user_data: 


<!-- ##### FUNCTION g_async_queue_pop ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_try_pop ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_timed_pop ##### -->


@queue: 
@end_time: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_length ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_sort ##### -->
<para>

</para>

@queue: 
@func: 
@user_data: 


<!-- ##### FUNCTION g_async_queue_lock ##### -->


@queue: 


<!-- ##### FUNCTION g_async_queue_unlock ##### -->


@queue: 


<!-- ##### FUNCTION g_async_queue_ref_unlocked ##### -->


@queue: 


<!-- ##### FUNCTION g_async_queue_unref_and_unlock ##### -->


@queue: 


<!-- ##### FUNCTION g_async_queue_push_unlocked ##### -->


@queue: 
@data: 


<!-- ##### FUNCTION g_async_queue_push_sorted_unlocked ##### -->
<para>

</para>

@queue: 
@data: 
@func: 
@user_data: 


<!-- ##### FUNCTION g_async_queue_pop_unlocked ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_try_pop_unlocked ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_timed_pop_unlocked ##### -->


@queue: 
@end_time: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_length_unlocked ##### -->


@queue: 
@Returns: 


<!-- ##### FUNCTION g_async_queue_sort_unlocked ##### -->
<para>

</para>

@queue: 
@func: 
@user_data: 


