To expand on my prior message, CVS is missing some useful features, but locks is definitely NOT one of them.
The main feature I'm missing is the ability to manipulate patchsets as an independent object. I often have several independent changes spanning several files, and there's nothing in cvs that allows me to select one change independently from the others, and not forget any file. Having to go through diff + patch is creepy and error-prone. The second main feature I'm missing is the ability to import stuff on any branch, not just the main branch, and to work off-main branch WITHOUT disturbing the main branch. CVS has got an annoying array of bugs and limitations in that area. The third missing feature is the well-known one of not being able to preserve history across renames. The last feature that would be useful is O(1) tagging... Gee, no locking in there...