+ (cond ((not wait-p)
+ `(unless (mutex-value ,mutex)
+ (unwind-protect
+ (progn
+ (setf (mutex-value ,mutex) (or ,value t))
+ ,@body)
+ (setf (mutex-value ,mutex) nil))))
+ (t
+ `(progn ,@body))))
+
+;;; what's the best thing to do with these on unithread? commented
+;;; functions are the thread versions, just to remind me what they do
+;;; there
+#+nil