• simonm's avatar
    [project @ 1999-03-16 13:20:07 by simonm] · 456eca73
    simonm authored
    Improvements to the threading model.
    
       - asynchronous exceptions supported.
    
    	- killThread# can now raise an exception in the specified
    	  thread.  It's new type is
    
    		killThread# :: ThreadId# -> Exception -> IO ()
    
    	  High-level versions:
    
    		killThread :: ThreadId -> IO ()
    		raiseInThread :: ThreadId -> Exception -> IO ()
    
    	  (killThread raises a 'ThreadKilled' exception in the
    	   specified thread).
    
    	  If the thread has no exception handler, it is killed
    	  as before.  Otherwise, the exception is passed to
    	  the innermost CATCH_FRAME and the thread is woken up
    	  if it was blocked.  The current computation is
    	  suspended, instead of being replaced by the exception
    	  (as is the case with throw).
    
    	  Sending an exception to the current thread works too.
    
       - new primitive: myThreadId# :: IO ThreadId# and corresponding
         high-level version myThreadId :: IO ThreadId.
    
       - new primitive: yield# :: IO (), and yield :: IO ().
    
       - the TSO now contains a pointer to the resource currently blocked
         on (MVAR or BLACKHOLE_BQ).
    
      - Add a giant comment to TSO.h about what the various link fields
        are supposed to do, and invariants etc.
    456eca73
Storage.c 14.8 KB