[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Locatives and Class slots
Date: Tue, 22 May 90 08:41 PDT
From: snicoud@atc.boeing.com (Stephen L. Nicoud)
I'm converting an application using New Flavors to use PCL on a
Symbolics 3650 (7.2). I have several cases where the code uses a flavor
instance variable as an argument to SCL:LOCF. The resulting locative is
then used with SCL:PROCESS-LOCK and SCL:PROCESS-UNLOCK.
I can't seem to get the same functionality with class slots.
Would anyone care to make suggestions about how to proceed? Is there a
way to get a locative to a PCL class slot?
Nope. In 7.4 and 8.0, there is a way to make a lock instance, using
PROCESS:MAKE-LOCK, which can then be locked inside a dynamic extent with
PROCESS:WITH-LOCK; you would just put that lock instance into a slot.
Of course, in 8.0 you can use Genera CLOS, which will allow locatives to
instance slots, I think.
In 7.2, one way to do this is to make the slot be a cons, and use its
CAR as the lock cell.
Here is how I might go about having locks on objects in general
(untested, but probably right in form):
(defclass locking-mixin ()
(lock :initform (list nil)))
(defmethod with-locked-thing-internal ((locked-thing locking-mixin) continuation
&optional (whostate "Lock"))
(declare (sys:downward-funarg continuation))
(with-slots (lock) locked-thing
(si:with-lock-held ((car lock) :whostate whostate) ; Genera macro
(funcall continuation))))
(defmacro with-locked-thing ((thing &optional (whostate '"Lock")) &body body)
`(flet ((continuation () ,@body))
(with-locked-thing-internal ,thing #'continuation whostate)))