Hi,

I am writing a smallish C extension for enabling parallel execution of
user level code in form of callbacks and stuff.
I would like to know, how I can have fine grained control over GL so
as more than one native thread can run truely parallely.

I searched the ML archives and came up with an explanation from ko1:

rb_thread_blocking_region(
   rb_blocking_function_t *func, void *data1,
   rb_unblock_function_t *ubf, void *data2)

func() is your function which you want to do without GL.  YARV
release GL and call func().  If func() returned, YARV acquire GL and
continue ruby program.

ubf (unblocking function) is called when another thread interrupts
this thread with Thread#kill, or main thread exits.  You must set
ubf as interrupt function for func().  You must write ubf or ruby
will not exit until func() ends.

Can anybody elaborate more?

-- 
Let them talk of their oriental summer climes of everlasting
conservatories; give me the privilege of making my own summer with my
own coals.

http://gnufied.org