Most points have been addressed by Skip and Greg and others already, but there's one I'd like to elaborate a little on:
On Monday, Jun 16, 2003, at 17:16 Europe/Amsterdam, Michel Pelletier wrote:
[*] 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.
I belive the reverse, synchronize will reduce user error and deadlocking code. with explicit locks programmers will forget, or become confused, with when and how to explicitly lock and unlock.
The problem is if one piece of code has synchronise a: ... synchronise b: ... and somewhere else you have synchronise b: ... synchronise a: ...
If you use fine-grained locking this is something you always have to be aware of. In C-class languages it requires only discipline (don't call any subroutines outside of your module while holding a lock, basically), in Python you can forget it because every single statement or expression can be calling out all over the place.
Note that this same problem turns up with Greg's "synchronised class" idea: if the language makes locking easy people will overuse it and it will come back to bite you (or, probably, a user of your module). -- 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