银行转账问题
from multiprocessing import Process, Value, Lock
import time
# 取钱
def getMoney(money, lock):
lock.acquire() # 上锁
for i in range(30):
money.value -= 1
# print(money.value)
time.sleep(0.01)
lock.release() # 开锁
# 存钱
def putMoney(money, lock):
lock.acquire() # 上锁
for i in range(30):
money.value += 1
time.sleep(0.01)
lock.release() # 开锁
if __name__ == '__main__':
# 设置money为共享
money = Value("i", 100)
# 创建锁对象
lock = Lock()
p1 = Process(target=getMoney, args=(money, lock))
p2 = Process(target=putMoney, args=(money, lock))
p1.start()
p2.start()
p1.join()
p2.join()
print(money.value)
火车票售卖
from multiprocessing import Process,Value,Lock
import time
class MyProcess(Process):
def __init__(self,name,lock):
super(MyProcess, self).__init__()
self.name = name
self.lock = lock
def run(self):
# p2 p3
while 1:
# p1 p2 p3
self.lock.acquire() # 上锁
with open("火车票") as file:
tickNum = int(file.read())
if tickNum > 0:
time.sleep(0.5) # p1
print("%s 窗口卖了第 %s 张票"%(self.name,tickNum))
# 票数减少
tickNum -= 1
# 更新文件中的票总数
with open("火车票","w") as file:
file.write(str(tickNum))
self.lock.release() # 开锁
if __name__ == '__main__':
lock = Lock()
p1 = MyProcess("1号",lock)
p2 = MyProcess("2号",lock)
p3 = MyProcess("3号",lock)
p1.start()
p2.start()
p3.start()
1879

被折叠的 条评论
为什么被折叠?



