Thread Primitives
spawn
(spawn f . args) -> actor thread
  f := procedure
Spawns an actor thread, invoking (f . args).
Differences of actor threads and plain Gambit threads:
- actor threads have an abortive exception handler that unwinds the stack on exceptional exits thus ensuring that unwind finalizers are run.
 - actor threads have an extra field for efficient access to thread locals.
 
spawn/name
(spawn/name name f . args) -> actor thread
  name := any
  f     := procedure
Like spawn, but the thread is named.
spawn/group
(spawn/group name f . args) -> actor thread
  name := any
  f     := procedure
Like spawn, but the thread is in a new thread group with name name.
spawn-actor
(spawn-actor f args name tgroup) -> actor thread
  f      := procedure
  args   := list; procedure arguments
  name   := any
  tgroup := thread-group
Spawns an actor thread.
spawn-thread
(spawn-thread thunk [name] [tgroup]) -> thread
  thunk := procedure
  name   := any
  tgroup := thread-group
Spawns a plain thread
actor-thread?
(actor-thread? obj) -> boolean
  obj := any object
Returns true if the object obj is an actor thread.
thread-local-ref
(thread-local-ref key [default]) -> any
  key, default := any
Retrieves the thread local value associated with key.
thread-local-get
(thread-local-get key) -> any
  key := any
Retrieves the thread local value associated with key, defaulting to #f.
thread-local-set!
(thread-local-set! key val) -> void
  key, val := any
Sets the thread local value associated with key to val.
thread-local-clear!
(thread-local-clear! key) -> void
  key := any
Clears the thread local value associated with key.
thread-local-table
(thread-local-table) -> hash table
Return the table of thread local values, creating it if it doesn't exist.
current-thread-group
(current-thread-group) -> thread-group
Returns the thread-group of the current thread.
with-lock
(with-lock mx thunk) -> any
  mx    := mutex
  thunk := procedure
Evaluates thunk with mx automatically locked on entry and unlocked on exist or if an exception is raised.
Note: the continuation should not escape or deadlock can occur. If you
may have a continuation escaping, use with-dynamic-lock.
with-dynamic-lock
(with-dynamic-lock mx thunk) -> any
  mx    := mutex
  thunk := procedure
Evaluates thunk in a dynamic extent where mx is locked.
unhandled-actor-exception-hook-set!
(unhandled-actor-exception-hook-set! proc) -> void
  proc := procedure
Hooks the actor exception handler to invoke (proc continuation exception) on uncaught
exceptions occurring in actor threads.