anchor.diff:  
   (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
  
positive.code:         (values item t)))))
  
  (defun dequeue (queue)
    (nth-value 0 (%dequeue queue)))
  
  (defun dequeue-no-block (queue &optional default)
    (multiple-value-bind (value valid) (%dequeue queue :wait nil)
      (if valid
          value
  
negative.code:       nil)))
  
  (defun semaphore-wait (semaphore)
    "Either decrement the given semaphore immediately or wait until the
  semaphore is incremented by `semaphore-signal'."
    (with-accessors ((count semaphore-count)
                     (lock semaphore-lock) (cv semaphore-cv))
        semaphore
  