class type mtprovider = object .. end
method single_threaded : bool
Whether this is a single-threaded program. In this case, a number
        of methods change their meaning, as described below.
method create_thread : 's 't. ('s -> 't) -> 's -> thread
In a multi-threaded program: Starts a new thread, and calls the
        passed function with the passed argument in the new thread
        (like Thread.create).
        In a single-threaded program: fails.
method self : thread
In a multi-threaded program: Returns the currently running thread.
        Subsequent calls of self can return different objects for the
        same thread, but the id method will always return the same number.
        In a single-threaded program: Returns a dummy object (see below).
method yield : unit -> unit
In a multi-threaded program: gives a hint that another thread should
        better run now.
        In a single-threaded program: this is a no-op.
method create_mutex : unit -> mutex
In a multi-threaded program: Creates a mutex and returns the object.
        In a single-threaded program: Returns a dummy mutex object (see below).
method create_condition : unit -> condition
In a multi-threaded program: Creates a condition variable and returns 
        the object.
        In a single-threaded program: Returns a dummy variable (see below).