[armedbear-devel] threads, join, clos
David Kirkman
dkirkman at ucsd.edu
Sat Apr 24 04:52:24 UTC 2010
Hi,
Is there an equivalent of java.lang.Thread.join() on the lisp side of
things? I looked around in LispThread.java and threads.lisp, but I
don't see anything obvious. I'd like to be able to write something
like:
(let ((threads (loop for i from 0 to 5
collect
(make-thread #'(lambda()
(format t "hey~%"))))))
(mapc #'thread-join threads)
(format t "is for horses~%"))
I've attached a patch that implements this version of thread-join. It
implements java semantics, this thread-join always returns nil. I
guess java doesn't really have a way to return arbitrary values, but
we easily do! I was thinking about hacking it up a bit more so that
thread-join would return the value of the function passed to
make-thread, e.g. so that
(thread-join (make-thread #'(lambda () 1)))
would return 1. But then it occurred to me that this functionality is
probably already in there under a different name. So, how do you guys
join your threads?
Cheers,
-david k.
P.S. Are there any known thread safety issues with CLOS? I've been
getting some weird MOP errors that I made go away by redefining
slot-value such that it has to acquire a global lock before it can do
anything. I assume that the problem is in my code: but the threads
that are executing when I get the failures share no code (or
variables), and every time the errors pop up slot-value is on the
callstack someplace.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: thread-join.diff
Type: application/octet-stream
Size: 1025 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20100423/08ba94df/attachment.obj>
More information about the armedbear-devel
mailing list