View source code
Display the source code in core/thread/threadbase.d from which thispage was generated on github.
Report a bug
If you spot a problem with this page, click here to create aGitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.Requires a signed-in GitHub account. This works well for small changes.If you'd like to make larger changes you may want to consider usinglocal clone.

Function core.thread.threadbase.thread_detachInstance

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.

extern(C) void thread_detachInstance(
  ThreadBase t
) nothrow @nogc;

Once the thread is removed from the runtime, it must not use the GC because it does not participate in the Stop-The-World mechanisms. With the default GC, that has a global lock, this might not cause races, but in GCs with regional locks, it definitely can cause races.

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 before calling this function, particularly if the thread is being detached at some indeterminate time before program termination:

extern(C) void rt_moduleTlsDtor();

This also does not call the GC thread cleanup routine. After running module dtors, it is recommended to call (from the thread itself) gc_getProxy().cleanupThread(Thread.getThis());

Authors

Sean Kelly, Walter Bright, Alex Rønne Petersen, Martin Nowak

License

Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)