I would use a simple time stamp field in the database to indicate"locked". Whenever someone attempts to book the room, the software compares the current time with the timestamp, and if it is > than 20 minutes and the payment has not been made, the lock is not valid.
This method is probably sufficiently efficient. A timestamp is usually 32-bits and the performance hit on the database calls with comparison negligible.