diff asyncio_threads/bank_question/README.md @ 48:46daba6e3cf4

Few python scrtips to show how to use asychio.
author MrJuneJune <me@mrjunejune.com>
date Sat, 13 Dec 2025 14:23:02 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/asyncio_threads/bank_question/README.md	Sat Dec 13 14:23:02 2025 -0800
@@ -0,0 +1,34 @@
+# 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.
+
+```
+class BankAccount:
+    def __init__(self, balance):
+        self.balance = balance
+
+    def deposit(self, amount):
+        new_balance = self.balance + amount  # read
+        time.sleep(0.1)                      # simulate delay
+        self.balance = new_balance           # write
+
+account = BankAccount(0)
+
+with ThreadPoolExecutor(max_workers=2) as executor:
+    futures = [
+        executor.submit(account.deposit, 500),
+        executor.submit(account.deposit, 700),
+    ]
+```
+
+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).