设有一个200名职工的企业,该企业在银行设立了一个公共账户,每个职工向账户存款1000次,每次存入10元,请编程完成此项工作。(考虑多线程同步的问题)
时间: 2024-03-01 10:54:52 浏览: 66
好的,我可以帮您编写这个程序。由于需要考虑多线程同步的问题,我会使用 Python 中的 threading 模块。
首先,我们需要定义一个函数来模拟每个职工向账户存款的过程。该函数需要接收两个参数:职工的编号和存款的次数。在函数中,我们可以使用一个 for 循环来模拟多次存款的过程,每次存款时需要对账户余额进行加操作。
接下来,我们需要创建200个线程来模拟200名职工。每个线程调用上述函数,传递对应的职工编号和存款次数作为参数。为了保证多线程同步,我们可以使用 threading.Lock 对象来控制对账户余额的访问。
最后,我们可以在主线程中等待所有子线程执行完毕,并输出最终账户余额。
下面是完整的代码示例:
```python
import threading
balance = 0
lock = threading.Lock()
def deposit(worker_id, times):
global balance
for i in range(times):
lock.acquire()
balance += 10
lock.release()
print(f"Worker {worker_id} has finished depositing {times} times.")
threads = []
for i in range(1, 201):
t = threading.Thread(target=deposit, args=(i, 1000))
threads.append(t)
t.start()
for t in threads:
t.join()
print(f"Final balance: {balance}")
```
在上述代码中,我们定义了一个全局变量 balance 来模拟银行账户余额,并使用 threading.Lock 对象来控制对该变量的访问。在 deposit 函数中,我们使用 for 循环模拟多次存款的过程,每次存款时需要获取锁、修改余额、释放锁三个步骤。在主线程中,我们创建200个子线程来模拟200名职工进行存款,并等待所有子线程执行完毕后输出最终账户余额。