Python的P、V操作:司机开车问题(线程的信号量实现)

 题目:

    对于司机:有开车,驾驶,停车几个操作

    对于售票员:有打开车门,关上车门几个操作

    要求:售票员关上车门后司机才能开车,司机停车后售票员才能打开车门。

import threading,time
lock_1 = threading.Semaphore(1)     #检查售票员是否关门
lock_2 = threading.Semaphore(0)     #检查司机是否停车
def 司机():
    for i in range(3):

            lock_1.acquire()
            print('司机开车')
            time.sleep(1)
            print('驾驶')
            print('到站停车')

            lock_2.release()
def 售票员():
    for i in range(3):

            lock_2.acquire()
            time.sleep(1)
            print('打开车门')
            print('乘客上下车')
            time.sleep(1)
            print('关上车门')

            lock_1.release()
if __name__=='__main__':
    p1 = threading.Thread(target=司机)
    p2 = threading.Thread(target=售票员)
    p1.start()
    p2.start()
    p1.join()
    p2.join()

解释:

1.里面的lock_1,lock_2为两个信号量;

2.lock_1.acquire()为P操作,lock_1.release()为V操作;

3.lock_1 = threading.Semaphore(1)的意思是将信号量lock_1的初值赋为1。

注意:

Semaphore管理一个内置的计数器, 
每当调用acquire()时内置计数器-1; 
调用release() 时内置计数器+1; 
计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。

我们将lock_1的初值赋为1,lock_2的初值赋为0,则先执行司机这一线程。

 

运行结果:

 

Python的PV操作实现生产者与消费者问题:https://blog.csdn.net/qq_40760732/article/details/89642313

Python中进程的创建:https://blog.csdn.net/qq_40760732/article/details/89386162

Python中多进程的应用:https://blog.csdn.net/qq_40760732/article/details/89408885

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值