[mcclim-devel] Threading and Waiting

Daniel Barlow dan at telent.net
Tue Feb 14 11:22:33 UTC 2006


On Tue, Feb 14, 2006 at 09:58:10AM +0000, John Connors wrote:
> While looking for the 'right' way to get a SCBL thread to wait for a 
> specified condition as part of an attempt to update port from the CLOCC, I 
> came across this gem in the McCLIM sources.

Really, there _is_ no 'right' way.  Threads in SBCL (as with threads
in OpenMCL and any other implementation using "native" threads) are
scheduled by the operating system, and the operating system, as a
rule, can't evaluate arbitrary bits of Lisp to decide if a thread is
runnable or not.  So it has to run it to find out if it wants to run
or not, which is not what I or anyone would really consider an
efficient use of resources.

Most of the uses of process-wait in the wild are for implementing
higher-level synchronisation constructs like
mutexes/semaphores/queues, and most of the Lisps with OS-scheduled
threads already have efficient implementations of these that play
nicely with the kernel scheduler (or at least have the potential to,
which a Lisp-based solution will never have[*]).  It would make far
more sense to encourage people to use the higher-level constructs
than provide them with a hacky workaround to shore up shonky code.
See e.g. http://www.cliki.net/BORDEAUX-MP for one possible "standard"
interface that includes mutexes and posix-style condition variables

> Now this will work, but my understanding is when calling sched_yeild, a 
> thread gets completely expired and put at the back of the scheduling queue. 

The semantics of sched_yield have changed (possibly even more than
once) from one Linux version to the next, and I can't even remember
what it's suppsoed to do these days.  I rather suspect that in the
grand scheme of things it doesn't matter too much, as this approach is
never going to be particularly efficient whatever you do.


-dan



More information about the mcclim-devel mailing list