Mercurial
view asyncio_threads/bank_question/main.py @ 89:b5e65b01f0a3
Seobeo Tests.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Thu, 01 Jan 2026 14:37:37 -0800 |
| 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)