进程(转账,卖票)

银行转账问题
 


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()



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值