On Monday, Jun 16, 2003, at 09:19 Europe/Amsterdam, Michel Pelletier wrote:
No explicit lock is necessary. Any object may be synchronized upon (except, perhaps, None). The first time an object is synchronized, a lock is invisibly associated with it behind the scenes, you cannot (and should not) access this lock. The lock exists for the life of the object it synchronizes. When a synchronize block is entered, the lock is acquire()d and and release()d when the block is exited.
I think this is a bad idea, after pondering it for a while[*]. There
will always be situations where you want to lock multiple objects, and
before you know it you'll end up with extra objects that hold no data
but only a lock. And then it would have been better to design the
language feature that way in the first place. Explicit is better than
implicit:-)
[*] I wondered for a while whether locking only a single object would
maybe steer people away from potentially deadlocking code, but I
believe it's the other way around: with explicit locks you actually
have to think of the locks you need, whereas with implicit locks you
don't, so you write deadlocking code more often.
--
Jack Jansen,