本案例模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。 账户的初始余额是1000元,两个线程每次存储100元,分别各存储1000元,不允许出现错误数据。
时间: 2024-05-12 12:15:45 浏览: 34
下面是一个简单的代码实现:
```python
import threading
class BankAccount:
def __init__(self):
self.balance = 1000
self.lock = threading.Lock()
def deposit(self, amount):
with self.lock:
self.balance += amount
def withdraw(self, amount):
with self.lock:
self.balance -= amount
def deposit_money(account):
for i in range(10):
account.deposit(100)
print("Deposited 100, balance is now", account.balance)
def main():
account = BankAccount()
t1 = threading.Thread(target=deposit_money, args=(account,))
t2 = threading.Thread(target=deposit_money, args=(account,))
t1.start()
t2.start()
t1.join()
t2.join()
print("Final balance:", account.balance)
if __name__ == '__main__':
main()
```
这里定义了一个 `BankAccount` 类,其中包含了一个 `balance` 属性和一个 `lock` 锁。 `deposit` 方法和 `withdraw` 方法都使用了 `with self.lock:` 语句来确保在执行这些方法时只有一个线程可以访问 `balance` 属性。
在 `deposit_money` 函数中,我们通过循环调用 `account.deposit(100)` 方法来模拟存款操作。由于两个线程都在执行此函数,因此我们期望银行账户的最终余额应为2000元。
最后,在主函数中,我们启动了两个线程并等待它们完成,然后打印出最终余额。
阅读全文