[gambit-list] Calling Scheme code from different OS threads
Taylor R Campbell
campbell at mumble.net
Sun Feb 25 11:24:19 EST 2007
Date: Sun, 25 Feb 2007 03:11:40 -0500
From: "James Long" <longster at gmail.com>
I need the ability to create OS threads because of the blocking nature of
the c calls (mainly with c functions that do network stuff).
One way to get around this is to serialize the communication between
the Scheme OS thread and the other OS threads through a pipe, on which
there can be non-blocking I/O. I implemented a proof of concept for
Scheme48 at <http:///mumble.net/~campbell/tmp/s48-addrinfo.tar.gz>;
perhaps you can scrounge some code or at least ideas from there.
On the Scheme side, Scheme threads call out to the C request code and
enqueue a `placeholder' to be set when a response is returned; a
placeholder is a write-once cell on which readers block until it is
written to. The C request code sends a request by pipe (or any other
mechanism, really, although we use a pipe here) to a different OS
thread and returns a pointer to where the result will be stored. The
Scheme threads then wait.
There is one dedicated Scheme thread that reads from a pipe, which the
separate OS threads will write to in order to indicate a response;
that Scheme thread distributes the responses to the appropriate Scheme
threads that were waiting for them.
More information about the Gambit-list
mailing list