druntime thread_needLock()

Fawzi Mohamed fmohamed at mac.com
Sat Dec 6 00:44:06 PST 2008


On 2008-12-06 08:33:40 +0100, Sean Kelly <sean at invisibleduck.org> said:

> dsimcha wrote:
>> According to both the docs and my own experiments, thread_needLock() in
>> core.thread returns a bool that depends on whether the current process has
>> *ever* been multithreaded at *any* point in its execution.  In Phobos's GC
>> (pre-druntime), a similar function existed, but it returned a bool based on
>> whether more than 1 thread was *currently* running.  It seems to me that
>> omitting locks should be safe if no more than 1 thread is currently running,
>> even if more than 1 was running at some point in the past.  Why is druntime's
>> thread_needLock() designed the way it is?
> 
> Typically, the stores of a terminating thread are only guaranteed to be 
> visible when join() returns for that thread... and then to the joining 
> thread only.  While it's true that the stores will eventually be 
> visible to all threads in a program, there's no easy way to figure out 
> exactly when this is (the lock-free people would probably say you'd 
> have to wait for a "quiescent state").  I also don't know of any apps 
> that are multi threaded for a while and then later become single 
> threaded, so the issue of performance loss seems like somewhat of a 
> corner case.
> 
> 
> Sean

ok so this is the reason, good to know...

Fawzi




More information about the Digitalmars-d mailing list