TLBB: The Last Big Breakage
Michel Fortin
michel.fortin at michelf.ca
Sun Mar 16 04:49:50 PDT 2014
On 2014-03-16 04:08:18 +0000, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> said:
> Fixing that has not gained focus until recently, when e.g.
> https://github.com/D-Programming-Language/dmd/pull/3067 has come about.
Synchronized classes should be trashed.
The whole concept is very prone to mistakes that could cause deadlocks
and offers no simple path to fix those errors once they're found. The
concept encourage people to keep locks longer than needed to access the
data. For one thing is bad for performance. It also makes callbacks
happen while the lock is held, which has a potential for deadlock if
the callback locks something else (through synchronized or other means).
Sure, there are safe ways to implement a synchronized class: you have
to use it solely as a data holder that does nothing else than store a
couple of variables and provide accessors to that data. Then you build
the business logic -- calculations, callbacks, observers -- in a
separate class that holds your synchronized class but does the work
outside of the lock.
The problem is that it's a very unnatural way to think of classes. Also
you have a lot of boilerplate code to write (synchronized class +
accessors) for every piece of synchronized data you want to hold. I bet
most people will not bother and won't realize that deadlocks could
happen.
Is there any example of supposedly well-written synchronized classes in
the wild that I could review looking for that problem?
--
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca
More information about the Digitalmars-d
mailing list