synchronized (this[.classinfo]) in druntime and phobos

Jonathan M Davis jmdavisProg at gmx.com
Mon Jun 4 01:56:29 PDT 2012


On Monday, June 04, 2012 10:51:08 mta`chrono wrote:
> Am 31.05.2012 17:05, schrieb Regan Heath:
> > .. but, hang on, can a thread actually lock a and then b?  If 'a' cannot
> > participate in a synchronized statement (which it can't under this
> > proposal) then no, there is no way to lock 'a' except by calling a
> > member.  So, provided 'a' does not have a member which locks 'b' - were
> > deadlock safe!
> > 
> > So.. problem solved; by preventing external/public lock/unlock on a
> > synchronized class.  (I think the proposal should enforce this
> > restriction; synchronized classes cannot define __lock/__unlock).
> > 
> > R
> 
> I think it doesn't matter whether you expose your mointor / locking /
> unlocking to the public or not. You can always unhappily create
> deadlocks that are hard to debug between tons of spaghetti code.

You can always create deadlocks, but if there's something which gives you 
little benefit but significantly increases the risk of deadlocks (e.g. making it 
easy to lock on a synchronized class' internal mutex via a synchronized 
block), then it's valuable to make it illegal. Because while it won't prevent 
all deadlocking, it _does_ eliminate one case where it's overly easy to 
deadlock.

- Jonathan M Davis


More information about the Digitalmars-d mailing list