Mercurial
view asyncio_threads/bank_question/main.py @ 278:8d560f50ed4c
Improve infinite canvas interactions and browser chrome
Render Lucide icons directly with Raylib, add searchable icon browsing, robust text editing, entity lifecycle animations, z-order-safe input, semantic themes, and animated editable browser controls. Document rendering, pinning, context, and component extension for future agents.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:16:14 -0700 |
| parents | 46daba6e3cf4 |
| children |
line wrap: on
line source
# # Bank Account # # You are given a simplified multi-threaded “bank account” implementation used by one of our infrastructure teams. The current code processes deposits concurrently but produces incorrect results. # # Task # # Identify the concurrency bugs in the implementation. # # Explain why these bugs occur. # # Fix the implementation without modifying the existing BankAccount class directly. # # You may use subclassing (Python) or embedding (Go-style composition), depending on the language you choose. # # Ensure your solution is thread-safe and produces the correct final balance (1200). from threading import Lock from concurrent.futures import ThreadPoolExecutor import time class BankAccount: def __init__(self, balance): self.balance = balance self._lock = Lock() def deposit(self, amount): while (self._lock.locked()): pass self._lock.acquire() new_balance = self.balance + amount # read time.sleep(0.1) # simulate delay self.balance = new_balance # write self._lock.release() account = BankAccount(0) with ThreadPoolExecutor(max_workers=2) as executor: futures = [ executor.submit(account.deposit, 500), executor.submit(account.deposit, 700), ] print(account.balance)