core.thread.threadbase
Source core/thread/osthread.d
- class
ThreadException
: object.Exception; - Base class for thread exceptions.
- class
ThreadError
: object.Error; - Base class for thread errors to be used for function inside GC when allocations are unavailable.
- abstract class
ThreadBase
; -
- pure nothrow @nogc @safe this(void function()
fn
, size_tsz
= 0); - package nothrow @nogc bool
destructBeforeDtor
(); - Cleans up any remaining resources used by this object.
- abstract Throwable
join
(boolrethrow
= true); - Waits for this thread to complete. If the thread terminated as the result of an unhandled exception, this exception will be rethrown.Parameters:
bool rethrow
Rethrow any unhandled exception which may have caused this thread to terminate. Throws:ThreadException if the operation fails. Any exception not handled by the joined thread.Returns:Any exception not handled by this thread if rethrow = false, null otherwise. - final @nogc @property @safe ThreadID
id
(); - Gets the OS identifier for this thread.Returns:If the thread hasn't been started yet, returns ThreadID.init. Otherwise, returns the result of GetCurrentThreadId on Windows, and pthread_self on POSIX. The value is unique for the current process.
- final @nogc @property @safe string
name
(); - Gets the user-readable label for this thread.Returns:The name of this thread.
- final @nogc @property @safe void
name
(stringval
); - Sets the user-readable label for this thread.Parameters:
string val
The new name of this thread. - final @nogc @property @safe bool
isDaemon
(); - Gets the daemon status for this thread. While the runtime will wait for all normal threads to complete before tearing down the process, daemon threads are effectively ignored and thus will not prevent the process from terminating. In effect, daemon threads will be terminated automatically by the OS when the process exits.Returns:true if this is a daemon thread.
- final @nogc @property @safe void
isDaemon
(boolval
); - Sets the daemon status for this thread. While the runtime will wait for all normal threads to complete before tearing down the process, daemon threads are effectively ignored and thus will not prevent the process from terminating. In effect, daemon threads will be terminated automatically by the OS when the process exits.Parameters:
bool val
The new daemon status for this thread. - final nothrow @nogc @property bool
isMainThread
(); - Tests whether this thread is the main thread, i.e. the thread that initialized the runtimeReturns:true if the thread is the main thread
- nothrow @nogc @property bool
isRunning
(); - Tests whether this thread is running.Returns:true if the thread is running, false if not.
- static nothrow @nogc @safe ThreadBase
getThis
(); - Provides a reference to the calling thread.Returns:The thread object representing the calling thread. The result of deleting this object is undefined. If the current thread is not attached to the runtime, a null reference is returned.
- static ThreadBase[]
getAll
(); - Provides a list of all threads currently being tracked by the system. Note that threads in the returned array might no longer run (see ThreadBase.isRunning).Returns:An array containing references to all threads currently being tracked by the system. The result of deleting any contained objects is undefined.
- static int
opApply
(scope int delegate(ref ThreadBase)dg
); - Operates on all threads currently being tracked by the system. The result of deleting any Thread object is undefined. Note that threads passed to the callback might no longer run (see ThreadBase.isRunning).Parameters:
int delegate(ref ThreadBase) dg
The supplied code as a delegate. Returns:Zero if all elemented are visited, nonzero if not. - package pure nothrow @nogc @safe this(size_t
sz
= 0); - package static nothrow @nogc void
setThis
(ThreadBaset
); - package(core.thread) final nothrow @nogc void
pushContext
(StackContext*c
); - package(core.thread) static nothrow @nogc @property Mutex
slock
(); - package(core.thread) static nothrow @nogc void
add
(StackContext*c
); - package static nothrow @nogc void
incrementAboutToStart
(ThreadBaset
);
- nothrow @nogc void
thread_term_tpl
(ThreadT, MainThreadStore)(ref MainThreadStore_mainThreadStore
); - Terminates the thread module. No other thread routine may be called afterwards.
- nothrow @nogc bool
thread_isMainThread
(); - ThreadT
thread_attachThis_tpl
(ThreadT)(); - Registers the calling thread for use with the D Runtime. If this routine is called for a thread which is already registered, no action is performed.
NOTE This routine does not run thread-local static constructors when called. If full functionality as a D thread is desired, the following function must be called after thread_attachThis:
extern (C) void rt_moduleTlsCtor(); - nothrow @nogc void
thread_detachThis
(); - Deregisters the calling thread from use with the runtime. If this routine is called for a thread which is not registered, the result is undefined.
NOTE This routine does not run thread-local static destructors when called. If full functionality as a D thread is desired, the following function must be called before thread_detachThis, particularly if the thread is being detached at some indeterminate time before program termination:
extern(C) void rt_moduleTlsDtor();See Also: - void
thread_detachByAddr
(ThreadIDaddr
);
nothrow @nogc voidthread_detachInstance
(ThreadBaset
); - Deregisters the given thread from use with the runtime. If this routine is called for a thread which is not registered, the result is undefined.
NOTE This routine does not run thread-local static destructors when called. If full functionality as a D thread is desired, the following function must be called by the detached thread, particularly if the thread is being detached at some indeterminate time before program termination:
extern(C) void rt_moduleTlsDtor(); - static ThreadBase
thread_findByAddr
(ThreadIDaddr
); - Search the list of all threads for a thread with the given thread identifier.Parameters:
ThreadID addr
The thread identifier to search for. Returns:The thread object associated with the thread identifier, null if not found. - nothrow @nogc void
thread_setThis
(ThreadBaset
); - Sets the current thread to a specific reference. Only to be used when dealing with externally-created threads (in e.g. C code). The primary use of this function is when ThreadBase.getThis() must return a sensible value in, for example, TLS destructors. In other words, don't touch this unless you know what you're doing.Parameters:
ThreadBase t
A reference to the current thread. May be null. - void
thread_joinAll
(); - Joins all non-daemon threads that are currently running. This is done by performing successive scans through the thread list until a scan consists of only daemon threads.
- nothrow void
thread_resumeAll
(); - Resume all threads but the calling thread for "stop the world" garbage collection runs. This function must be called once for each preceding call to thread_suspendAll before the threads are actually resumed.
In This routine must be preceded by a call to thread_suspendAll.
Throws:ThreadError if the resume operation fails for a running thread. - enum
ScanType
: int; - Indicates the kind of scan being performed by thread_scanAllType.
stack
- The stack and/or registers are being scanned.
tls
- TLS data is being scanned.
- alias
ScanAllThreadsFn
= void delegate(void*, void*) nothrow;
aliasScanAllThreadsTypeFn
= void delegate(ScanType, void*, void*) nothrow; - The scanning function.
- nothrow void
thread_scanAllType
(scope ScanAllThreadsTypeFnscan
); - The main entry point for garbage collection. The supplied delegate will be passed ranges representing both stack and register values.Parameters:
ScanAllThreadsTypeFn scan
The scanner function. It should scan from p1 through p2 - 1. In This routine must be preceded by a call to thread_suspendAll.
- nothrow void
thread_scanAll
(scope ScanAllThreadsFnscan
); - The main entry point for garbage collection. The supplied delegate will be passed ranges representing both stack and register values.Parameters:
ScanAllThreadsFn scan
The scanner function. It should scan from p1 through p2 - 1. In This routine must be preceded by a call to thread_suspendAll.
- @nogc void
thread_enterCriticalRegion
(); - Signals that the code following this call is a critical region. Any code in this region must finish running before the calling thread can be suspended by a call to thread_suspendAll.This function is, in particular, meant to help maintain garbage collector invariants when a lock is not used. A critical region is exited with thread_exitCriticalRegion. Warning: Using critical regions is extremely error-prone. For instance, using locks inside a critical region can easily result in a deadlock when another thread holding the lock already got suspended. The term and concept of a 'critical region' comes from Mono's SGen garbage collector.
In The calling thread must be attached to the runtime.
- @nogc void
thread_exitCriticalRegion
(); - Signals that the calling thread is no longer in a critical region. Following a call to this function, the thread can once again be suspended.
In The calling thread must be attached to the runtime.
- @nogc bool
thread_inCriticalRegion
(); - Returns true if the current thread is in a critical region; otherwise, false.
In The calling thread must be attached to the runtime.
- package nothrow @nogc void
onThreadError
(stringmsg
); - A callback for thread errors in D during collections. Since an allocation is not possible a preallocated ThreadError will be used as the Error instanceReturns:never returnsThrows:ThreadError.
- enum
IsMarked
: int; - Indicates whether an address has been marked by the GC.
no
- Address is not marked.
yes
- Address is marked.
unknown
- Address is not managed by the GC.
- alias
IsMarkedDg
= int delegate(void* addr) nothrow; - The isMarked callback function.
- nothrow void
thread_processGCMarks
(scope IsMarkedDgisMarked
); - This routine allows the runtime to process any special per-thread handling for the GC. This is needed for taking into account any memory that is referenced by non-scanned pointers but is about to be freed. That currently means the array append cache.Parameters:
IsMarkedDg isMarked
The function used to check if addr is marked. In This routine must be called just prior to resuming all threads.
- nothrow @nogc void*
thread_stackTop
(); - Returns the stack top of the currently active stack within the calling thread.
In The calling thread must be attached to the runtime.
Returns:The address of the stack top. - nothrow @nogc void*
thread_stackBottom
(); - Returns the stack bottom of the currently active stack within the calling thread.
In The calling thread must be attached to the runtime.
Returns:The address of the stack bottom. - package size_t
ll_nThreads
; - package ll_ThreadData*
ll_pThreads
; - package void[mutexClassInstanceSize]
ll_lock
; - package nothrow @nogc @property Mutex
lowlevelLock
(); - package nothrow @nogc void
initLowlevelThreads
(); - package nothrow @nogc void
termLowlevelThreads
(); - package nothrow @nogc void
ll_removeThread
(ThreadIDtid
); - nothrow @nogc bool
findLowLevelThread
(ThreadIDtid
); - Check whether a thread was created by createLowLevelThread.Parameters:
ThreadID tid
the platform specific thread ID. Returns:true if the thread was created by createLowLevelThread and is still running.