<!-- ##### SECTION Title ##### -->
cothreads

<!-- ##### SECTION Short_Description ##### -->
userspace threads

<!-- ##### SECTION Long_Description ##### -->
<para>
Cothreads are a simple user-space method for switching between
subtasks.  They're based on setjmp()/longjmp() in their current form.
</para>

<para>
Cothreads are used for loop-based elements that pull data instead
of being fed with data. Cothreads are usually used by a #GstScheduler.
</para>

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

<!-- ##### STRUCT cothread_state ##### -->
<para>
The cothread state structure
</para>

@ctx: 
@cothreadnum: 
@priv: 
@func: 
@argc: 
@argv: 
@flags: 
@sp: 
@jmp: 
@stack_base: 
@stack_size: 
@magic_number: 

<!-- ##### USER_FUNCTION cothread_func ##### -->
<para>
the function that will be called when the cothread starts. The function
prototype is like a main() function, so you can do whatever you want with
it.
</para>

@argc: a main-like argument count
@argv: a main-like array of arguments
@Returns: a return code


<!-- ##### STRUCT cothread_context ##### -->
<para>
The cothread context structure
</para>

@cothreads: 
@main: 
@current: 
@mutex: 

<!-- ##### MACRO COTHREAD_STARTED ##### -->
<para>
Indicates the cothread is started.
</para>



<!-- ##### MACRO COTHREAD_DESTROYED ##### -->
<para>
Indicates the cothread is destroyed.
</para>



<!-- ##### FUNCTION cothread_context_init ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION cothread_context_free ##### -->
<para>

</para>

@ctx: 


<!-- ##### FUNCTION cothread_get_private ##### -->
<para>

</para>

@cothread: 
@Returns: 


<!-- ##### FUNCTION cothread_set_private ##### -->
<para>

</para>

@cothread: 
@data: 


<!-- ##### FUNCTION cothread_create ##### -->
<para>

</para>

@ctx: 
@Returns: 


<!-- ##### FUNCTION cothread_free ##### -->
<para>

</para>

@cothread: 


<!-- ##### FUNCTION cothread_setfunc ##### -->
<para>

</para>

@cothread: 
@func: 
@argc: 
@argv: 


<!-- ##### FUNCTION cothread_stop ##### -->
<para>

</para>

@cothread: 


<!-- ##### FUNCTION cothread_switch ##### -->
<para>

</para>

@cothread: 


<!-- ##### FUNCTION cothread_context_get_data ##### -->
<para>

</para>

@cothread: 
@key: 
@Returns: 


<!-- ##### FUNCTION cothread_context_set_data ##### -->
<para>

</para>

@cothread: 
@key: 
@data: 


<!-- ##### FUNCTION cothread_lock ##### -->
<para>

</para>

@cothread: 


<!-- ##### FUNCTION cothread_trylock ##### -->
<para>

</para>

@cothread: 
@Returns: 


<!-- ##### FUNCTION cothread_unlock ##### -->
<para>

</para>

@cothread: 


<!-- ##### FUNCTION cothread_main ##### -->
<para>

</para>

@ctx: 
@Returns: 


<!-- ##### FUNCTION cothread_current_main ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION cothread_current ##### -->
<para>

</para>

@Returns: 


