Advanced
Asynchronous Race Condition Debugging
Identify and fix a complex race condition in a snippet of asynchronous JavaScript code involving shared state.
📝 Conteúdo do Prompt
Review the following asynchronous JavaScript code snippet designed to manage bank account withdrawals. The code uses async/await and shared global state. Identify the specific race condition that allows a user to withdraw more than their balance if two withdrawal requests happen nearly simultaneously. Provide the corrected code using a Mutex or Semaphore pattern to ensure thread safety in a single-threaded Event Loop environment. Explain *why* the race condition occurs despite JavaScript being single-threaded.