druntime thread_needLock()

Fawzi Mohamed fmohamed at mac.com
Sat Dec 6 01:06:42 PST 2008


On 2008-12-06 09:44:06 +0100, Fawzi Mohamed <fmohamed at mac.com> said:

> 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

a memory barrier would be needed, and atomic decrements, but I see that 
it is not portable...




More information about the Digitalmars-d mailing list