There are essentially 2 approaches.
One is to use
Optomistic Locking[
^] and the other is a more Pessimistic Lock approach.
The earlier is often done with time stamps. You let the user edit but when they check back in you compare their update time (before they touched the data) to the update time of what is stored. If they are not the same you must reject it (someone just updated).
The pessimistic lock is the idea that you make a table (or something) that tracks when an object is "Checked Out". If it is checked out then no one else can check it out. Often you want to put some rules around check outs like expiration or identity principal.
I would recomend the later, but the Optomistic is easier to build since you just compare some time stamps and reject the entry if it is not correct. The optimistic approach works if you do not have to many end users that touch the same entries.