Scheme 48 Manual | Contents | In Chapter: Threads
Previous: Creating and controlling threads | Next: Creating and controlling threads

## Creating and controlling threads

The bindings described in this section are part of the `threads` structure.

- `(spawn thunk) -> thread`
- `(spawn thunk name) -> thread`

`Spawn` creates a new thread, passes that thread to the current scheduler, and instructs the scheduler to run `thunk` in that thread. The `name` argument (a symbol) associates a symbolic name with the thread; it is purely for debugging purposes.

- `(relinquish-timeslice)`
- `(sleep time-in-milliseconds)`
- `(terminate-current-thread)`

`Relinquish-timeslice` instructs the scheduler to run another thread, thus relinquishing the timeslice of the current thread. `Sleep` does the same and asks the scheduler to suspend the current thread for at least `time-in-milliseconds` milliseconds before resuming it. Finally, `terminate-current-thread` terminates the current thread.

Each thread is represented by a thread object. The following procedures operate on that object:

- `(current-thread) -> thread`
- `(thread? thing) -> boolean`
- `(thread-name thread) -> name`
- `(thread-uid thread) -> integer`

`Current-thread` returns the thread object associated with the currently running thread. `Thread?` is the predicate for thread objects. `Thread-name` extracts the name of the thread, if one was specified in the call to `spawn`, `#f` otherwise. `Thread-uid` returns the uid of the thread, a unique integer assigned by the thread system.

Previous: Creating and controlling threads | Next: Creating and controlling threads