anchor.diff:          (values item t)))))
   
   (defun dequeue (queue)
  +  "Return and remove the item at the front of the queue.
  +
  +This function will block if there are no items in the queue.  See
  +`dequeue-no-block'."
     (nth-value 0 (%dequeue queue)))
   
   (defun dequeue-no-block (queue &optional default)
  +  "Return and remove the item at the front of the queue.
  +
  +This function will return immediately if there aren't any items in the
  +queue."
     (multiple-value-bind (value valid) (%dequeue queue :wait nil)
       (if valid
           value
  
positive.code: 
  (defstruct (queue
               (:constructor %make-queue))
    front
    back
    (lock (make-lock))
    (cv (make-condition-variable)))
  
  (defun make-queue ()
    (%make-queue))
  
  (defun enqueue (item queue)
    (with-accessors ((front queue-front) (back queue-back)
                     (lock queue-lock) (cv queue-cv)) queue
      (with-lock-held (lock)
        (cond
          ((null front)
  
negative.code: 
  (defstruct (semaphore
               (:constructor %make-semaphore))
    "This struct represents the standard semaphore synchronization
  primitive."
    (count 0)
    (lock (make-lock))
    (cv (make-condition-variable)))
  
  (defun make-semaphore ()
    "Create a new semaphore."
    (%make-semaphore))
  
  (defun semaphore-signal (semaphore)
    "Increment the given semaphore and allow a thread blocked in
  `semaphore-wait' to continue."
    (with-accessors ((count semaphore-count)
                     (lock semaphore-lock) (cv semaphore-cv))
        semaphore
  