On May 31, 2012, at 2:48 AM, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote:
> On 5/31/12 2:36 AM, Regan Heath wrote: >> On Wed, 30 May 2012 19:29:39 +0100, Andrei Alexandrescu >> <seewebsiteforem...@erdani.org> wrote: >>> You can have deadlocks but with synchronized you can't leak locks or >>> doubly-unlock them. With free mutexes you have all of the above. >> >> I'm not suggesting using free mutexes. I'm suggesting keeping the mutex >> private inside the object. > > Ergo, you are suggesting using free mutexes. Your second sentence destroys > the first. To be fair: auto m = new Mutex; synchronized (m) {...} Free mutexes but still safe. Scope guards obviously work too. That said, I think the point of contention here is that because synchronized can take an arbitrary object, it's possible to lock on a class for stuff completely unrelated to what the class does internally. It's certainly bad form though, and I don't know a good way to prevent it without crippling synchronized.