anchor.diff:  (defun main-thread-p (thread) (eq thread *top-thread*))
   
   (defun kill-thread-if-not-main (thread)
  -" kills a given thread, unless the thread is the main thread.
  - returns nil if thread is main.
  - returns a 'terminated~' string otherwise"
  + "kills a given thread, unless the thread is the main thread.
  +  returns nil if thread is main.
  +  returns a 'terminated~' string otherwise"
     (unless (main-thread-p thread)
       (sb-thread:terminate-thread thread)
       (concatenate 'string "terminated " (sb-thread:thread-name thread))))
  
positive.code:   *v*)
  
  (define-test test-threads-dont-get-bindings
      "bindings are not inherited across threads"
    (let ((thread-ret-val (sb-thread:join-thread
                           (sb-thread:make-thread 'returns-v))))
      (assert-equal thread-ret-val ____))
    (let ((*v* "LEXICAL BOUND VALUE"))
      (assert-equal *v* ____)
      (let ((thread-ret-val (sb-thread:join-thread
                             (sb-thread:make-thread 'returns-v))))
        (assert-equal thread-ret-val ____))))
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
negative.code:   (sb-thread:signal-semaphore *g-semaphore*))
  
  (define-test test-increment-semaphore
    (assert-equal 0 (sb-thread:semaphore-count *g-semaphore*))
    (sb-thread:join-thread (sb-thread:make-thread 'semaphore-increments-g :name "S incrementor 1"))
    (sb-thread:join-thread (sb-thread:make-thread 'semaphore-increments-g :name "S incrementor 2"))
    (sb-thread:join-thread (sb-thread:make-thread 'semaphore-increments-g :name "S incrementor 3"))
    (assert-equal 3 (sb-thread:semaphore-count *g-semaphore*)))
  
  
  ;; Semaphores can be used to manage resource allocation, and to trigger
  