mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 20:00:19 +02:00
89 lines
3.1 KiB
Text
89 lines
3.1 KiB
Text
This is a source code distribution for QuickThreads. QuickThreads is a
|
|
toolkit for building threads packages; it is described in detail in the
|
|
University of Washington CS&E Technical report #93-05-06, available via
|
|
anonymous ftp from `ftp.cs.washington.edu' (128.95.1.4, as of Oct. '94)
|
|
in `tr/1993/05/UW-CSE-93-05-06.PS.Z'.
|
|
|
|
This distribution shows basic ideas in QuickThreads and elaborates with
|
|
example implementations for a gaggle of machines. As of October those
|
|
machines included:
|
|
|
|
80386 faimly
|
|
88000 faimily
|
|
DEC AXP (Alpha) family
|
|
HP-PA family
|
|
KSR
|
|
MIPS family
|
|
SPARC V8 family
|
|
VAX family
|
|
|
|
Configuration, build, and installation are described in INSTALL.
|
|
|
|
Be aware: that there is no varargs code for the KSR.
|
|
|
|
The HP-PA port was designed to work with both HP workstations
|
|
and Convex SPP computers. It was generously provided by Uwe Reder
|
|
<uereder@cip.informatik.uni-erlangen.de>. It is part of the ELiTE
|
|
(Erlangen Lightweight Thread Environment) project directed by
|
|
Frank Bellosa <bellosa@informatik.uni-erlangen.de> at the Operating
|
|
Systems Department of the University of Erlangen (Germany).
|
|
|
|
Other contributors include: Weihaw Chuang, Richard O'Keefe,
|
|
Laurent Perron, John Polstra, Shinji Suzuki, Assar Westerlund,
|
|
thanks also to Peter Buhr and Dirk Grunwald.
|
|
|
|
|
|
Here is a brief summary:
|
|
|
|
QuickThreads is a toolkit for building threads packages. It is my hope
|
|
that you'll find it easier to use QuickThreads normally than to take it
|
|
and modify the raw cswap code to fit your application. The idea behind
|
|
QuickThreads is that it should make it easy for you to write & retarget
|
|
threads packages. If you want the routine `t_create' to create threads
|
|
and `t_block' to suspend threads, you write them using the QuickThreads
|
|
`primitive' operations `QT_SP', `QT_INIT', and `QT_BLOCK', that perform
|
|
machine-dependent initialization and blocking, plus code you supply for
|
|
performing the portable operatons. For example, you might write:
|
|
|
|
t_create (func, arg)
|
|
{
|
|
stk = malloc (STKSIZE);
|
|
stackbase = QT_SP (stk, STKSIZE);
|
|
sp = QT_INIT (stakcbase, func, arg);
|
|
qput (runq, sp);
|
|
}
|
|
|
|
Threads block by doing something like:
|
|
|
|
t_block()
|
|
{
|
|
sp_next = qget (runq);
|
|
QT_BLOCK (helper, runq, sp_next);
|
|
// wake up again here
|
|
}
|
|
|
|
// called by QT_BLOCK after the old thread has blocked,
|
|
// puts the old thread on the queue `onq'.
|
|
helper (sp_old, onq)
|
|
{
|
|
qput (onq, sp_old);
|
|
}
|
|
|
|
(Of course) it's actually a bit more complex than that, but the general
|
|
idea is that you write portable code to allocate stacks and enqueue and
|
|
dequeue threads. Than, to get your threads package up and running on a
|
|
different machine, you just reconfigure QuickThreads and recompile, and
|
|
that's it.
|
|
|
|
The QuickThreads `distribution' includes a sample threads package (look
|
|
at stp.{c,h}) that is written in terms of QuickThreads operations. The
|
|
TR mentioned above explains the simple threads package in detail.
|
|
|
|
|
|
|
|
If you do use QuickThreads, I'd like to hear both about what worked for
|
|
you and what didn't work, problems you had, insights gleaned, etc.
|
|
|
|
Let me know what you think.
|
|
|
|
David Keppel <pardo@cs.washington.edu>
|