模拟一个银行存款的程序。假设有两个储户都去银行往同一个账户进行存款,一次存10块,每人存100次。要求储户每存一次钱,每次账户余额增加10块,在控制台输出当前账户的余额。 思考: 是否存在存款少算的问题?如何解决
时间: 2024-02-05 07:13:39 浏览: 26
可以使用线程和锁来实现这个程序,确保每个储户存款时账户余额的正确性。下面是一个简单的代码实现:
```python
import threading
class BankAccount:
def __init__(self):
self.balance = 0
self.lock = threading.Lock()
def deposit(self, amount):
with self.lock:
self.balance += amount
print("Current balance: ", self.balance)
def main():
account = BankAccount()
threads = []
for i in range(2):
t = threading.Thread(target=deposit_money, args=(account,))
threads.append(t)
t.start()
for t in threads:
t.join()
def deposit_money(account):
for i in range(100):
account.deposit(10)
if __name__ == '__main__':
main()
```
在这个程序中,我们使用了一个 `BankAccount` 类来表示银行账户,包含了 `balance` 和 `lock` 两个属性。在 `deposit` 方法中,我们使用了 `with self.lock` 语句来获取锁,确保了多线程环境下的数据安全。在 `main` 函数中,我们创建了两个储户,每个储户都会存款 100 次,每次存款 10 块。最后,我们使用 `join` 方法等待所有线程执行完毕。
如果使用线程和锁来实现程序,就可以避免存款少算的问题。如果有多个线程同时对 `balance` 进行修改,锁会确保只有一个线程能够修改成功,其他线程会被阻塞直到锁被释放。这样可以确保每个储户存款时账户余额的正确性。
阅读全文