lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


David Given <dg@cowlark.com> wrote:
>
> A while back I wrote a coroutine library using
> setcontext()/getcontext(), for a project I was doing in C++ (which, it
> turns out, would have been much easier in Lua, but that's beside the point).
>
> The lesson I learned from this is: don't use setcontext()/getcontext().
> Some Linux libc versions do not allow you to use pthreads functions from
> stacks that were not allocated through pthreads. (Because they use magic
> numbers at the top of the stack to identify which thread is running.)
> This means that if you call a function in any library which has been
> compiled with pthreads support, like malloc(), really bad things happen.

That's pretty sad.

GNU Pth is a co-operative threading library designed to look a bit like
POSIX threads. I don't know what primitives it uses.
http://www.gnu.org/software/pth/

If you know which direction your stack grows in, you can implement
coroutines with setjmp+longjmp (to switch contexts) and either alloca() or
C99 dynamic arrays (to perform arithmetic on the stack pointer when
creating a new context). This is a fun low-level hack rather than
something you should use in real life...

http://fanf.livejournal.com/105413.html
http://fanf.livejournal.com/105655.html

Tony.
-- 
f.anthony.n.finch  <dot@dotat.at>  http://dotat.at/
Sole: Variable 3 or 4, becoming southeasterly 4 or 5 later in west. Moderate.
Showers. Moderate or good.