The problem with locking is that it isn't perfect when user input is required.
Normally I'd:
Read and Lock
Change
Write and Unlock
In a till example though you've got:
Read (and if locked there's a problem if someone else want's to get the same item's data)
User spends some time making a change
Write
IIRC it was something to do with the update type of the data set > Update where all fields matched the old fields before writing and if they didn't possibly threw an exception or triggered an event. Also IIRC there was some problem when the exception or event triggered: the old field value wasn't accurate, possibly having been overwritten by the new field.
For an example such as the till one above I could probably write increment/decrement functions that actually perform the quick, read & lock, modify, post & unlock and I can't remember at the time why we didn't do this.
Regards,
Stephen