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, Jack.Jansen@cwi.nl, http://www.cwi.nl/%7Ejack If I can't dance I don't want to be part of your revolution -- Emma Goldman