Skip to content
Snippets Groups Projects
Commit 456eca73 authored by Simon Marlow's avatar Simon Marlow
Browse files

[project @ 1999-03-16 13:20:07 by simonm]

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.
parent 8306cc58
No related merge requests found
Showing
with 506 additions and 243 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment