It depends on how tightly you need to lock the record. Lock it as in the users can't see it or lock it so that they can see but can't modify it?
You could use validation calculations to reject changes to the fields when a "lock" field is set to a particular value, but you are trading doing this for multiple Privilege sets for doing it for every field and the validation rules will let the user attempt the fix only to then reject their input--that's not as user friendly a way to do this.
There are also layout/script based methods, but this is not as robust a system as any omissions by your part on any layout where the data is accessible can leave a loop hole that lets a user do what you are trying to keep them from doing.
What I am trying to do is prevent the user from changing any field in the record, but be able to see the record. What I now do is to go into Privileges and under records edit, select limited and then put in a formula Locked <> 1. If that is the best way to accomplish record locking, then so be it. But it sure would be nice if there were something easier since I have a lot of privilege sets.