There really is not a perfect way to do this. You basically have 3 options
- Reserve the resource as soon as the user indicates that they want to reserve it (this what nycballet.com does)
- Reserve the resource when the user commits to the purchase(this is what travelocity does).
- Let both users purchase the resource and have a facility for a human to rollback one of the transactions (aka overbooking)
Which you pick ultimately is a business decision and one that depends on the shape of your funnel and how sensitive your users are to UX problems.