[slime-devel] Re: Partial multiprocessing support on CMUCL
Luke Gorrie
luke at bluetail.com
Mon Dec 15 09:00:16 UTC 2003
Luke Gorrie <luke at bluetail.com> writes:
> Peter Siebel suggests using monitors. Now that I think about it, I
> have already defined (SUSPEND-THIS-THREAD) and (RESUME THREAD)
> primitives, which would be enough to build monitors with. Maybe that
> is the way to go.
I asked some guys at work how to do this. It turns out that mutexes
are enough, and it can be done without those SUSPEND/RESUME primitives
or monitors. "Bread and butter POSIX threads stuff."
The algorithm is this:
We define a global lock L, and a global variable WHO that is bound
to the thread currently allowed to talk to Emacs.
Every thread that wants to talk to Emacs loops:
Acquire lock L:
If I am WHO, do my processing.
Release L
The Swank thread's "processing" is to read and evaluate a command
from Emacs, and then loop. That command may have the side-effect of
reassigning WHO to another thread.
The "processing" of all other threads is to conduct a conversation
with Emacs and then reassign WHO back to the Swank thread.
When a thread wants to be debugged, it goes until a loop waiting
until it becomes WHO. When Emacs chooses to debug such a thread, it
tells the Swank thread to assign WHO accordingly. When that thread
finishes debugging, it reassigns WHO to the Swank thread.
I'll implement this tomorrow unless a better way comes along.
Cheers,
Luke
More information about the slime-devel
mailing list