In a distributed system, you can't be prevented from simultaneous withdrawals. If you want to prevent simultaneous transactions then don't use a distributed system.
By "distributed system", I mean a system where two or more different components can act without waiting for confirmation from the rest of the system. Two-phase commit is not distributed, because while it might involve physically different systems communicating by passing messages, a transaction still has to wait for confirmation from all members.
I think the correct term for what I mean is "loosely coupled", but DbQuestioner88 used the term "distributed system" in the question, so I used it in the answer.
There used to be a bank in New Zealand whose ATMs would operate when disconnected. If the ATM could not contact the central computer system, it would still allow a withdrawal of up to $40. When it did connect later on, the central system would gather together all of these changes. If the withdrawals meant you were now in overdraft then you were in overdraft, and probably paying some interest.
The bank did this so that you could still get some cash out for things like groceries, taxis home, and small emergencies, even if the computer network was down (which it wasn't often, even in the 80s).
Each ATM would only do this once per account, so if you wanted to abuse it then you had to quickly travel between lots of ATMs, which wasn't cost effective. A few people still abused it but the bank treated this as a cost of providing this extra service. In any case, you still had to pay the overdraft back.