Initializing D runtime and executing module and TLS ctors for D libraries
IGotD-
nise at nise.com
Sat Jan 30 13:49:52 UTC 2021
On Saturday, 30 January 2021 at 12:28:16 UTC, Ali Çehreli wrote:
>
> I wonder whether doing something in the runtime is possible.
> For example, it may be more resilient and not crash when
> suspending a thread fails because the thread may be dead
> already.
>
> However, studying the runtime code around thread_detachThis
> three years ago, I had realized that like many things in
> computing, the whole stop-the-world is wishful thinking because
> there is no guarantee that your "please suspend this thread"
> request to the OS has succeeded. You get a success return code
> back but it means your request succeeded not that the thread
> was or will be suspended. (I may be misremembering this point
> but I know that the runtime requests things where OS does not
> give full guarantee for.)
>
OT. A thread that suspends itself will always happen (not taking
fall through cases into account), if not, throw the OS away. If a
thread suspends another thread, then you don't really know when
that thread will be suspended. I would discourage that threads
suspends other threads because that will open up a new world of
race conditions. Some systems don't even allow it and its
benefits are very limited.
Back to topic. I think that the generic solution even if it
doesn't help you with your current implementation is to ban TLS
all together. I think there have already been requests to remove
TLS for druntime/phobos totally and I think this should
definitely be done sooner than later. Also if you write a shared
library in D, simply don't use TLS at all. This way it will not
matter if a thread is registered by druntime or not. TLS is in my
opinion a wart in computer science.
More information about the Digitalmars-d-learn
mailing list