import time
import threading
# 吃火锅鱼丸
guo = []
suo = threading.Condition() #条件锁
# 生产者负责生产
class Produce(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
suo.acquire() #先锁住
while True:
time.sleep(1)
guo.append("鱼丸")
print("%s生产了一个鱼丸,现在锅里有%s个鱼丸"%(self.name,len(guo)))
if len(guo)>=5:
print("锅里已经有%s个鱼丸"%len(guo))
suo.notify() # 通知
suo.wait() # wait等待 释放另一个线程 # 消费者负责消费
class Consumer(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
suo.acquire()
while True:
time.sleep(1.5)
guo.pop()
print("%s吃了一个鱼丸,现在锅里有%s个鱼丸"%(self.name,len(guo)))
if len(guo)<1:
print("锅里已经没有鱼丸了,请添加鱼丸。")
suo.notify() # 通知
suo.wait()# wait 等待 释放另一个线程
pro = Produce()
pro.start()
con = Consumer()
con.start() # 汽车订单变化
Car = ["保时捷911","丰田普拉多","哈弗H5","奔驰G500","路虎","法拉利","宝马X5","奥迪A8","膜拜单车","大巴车"]
suo = threading.Condition() #条件锁
List = []
index = -1
class car(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
suo.acquire()
while True:
global index
time.sleep(2)
index+=1
List.append(Car[index])
print("恭喜靳志龙喜提一辆%s,请继续选择你喜爱的车"%Car[index])
suo.notify()
if len(List)>=10:
print("对不起,你的银行卡余额不足")
suo.release()
break
else:
suo.wait()
class carbox(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
suo.acquire()
while True:
global index
time.sleep(0.5)
print("仓库里还有%s辆车"%(len(Car)-index-1))
suo.notify()
if len(List) >= 10:
print("哈哈,其实我们也没有车了,小哥哥")
suo.release()
break
else:
suo.wait()
aa = car()
aa.start()
bb = carbox()
bb.start()

python线程condition条件锁应用实例的更多相关文章

  1. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  2. python线程的条件变量Condition的用法实例

      Condition 对象就是条件变量,它总是与某种锁相关联,可以是外部传入的锁或是系统默认创建的锁.当几个条件变量共享一个锁时,你就应该自己传入一个锁.这个锁不需要你操心,Condition 类会 ...

  3. python多线程--Condition(条件对象)

    Condition class threading.Condition(lock=None 这个类实现条件变量对象.条件变量允许一个或多个线程等待,知道它们被另一个线程唤醒. 如果给出了lock参数而 ...

  4. python 线程池和锁

    一.死锁现象与递归锁 锁:Lock线程安全,多线程操作时,内部会让所有线程排队处理.如:list/dict/Queue        线程不安全 + 人 => 排队处理. import thre ...

  5. (15)线程---Condition条件

      功能:也是通过阻塞控制线程数量.类似信号量\进程池\线程池的作用 语法:wait from threading import Condition con= Condition() conn.acq ...

  6. Linux 开发之线程条件锁那些事

    2019独角兽企业重金招聘Python工程师标准>>> 条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发.一个常用的例子就是在线程中无限循环执 ...

  7. python线程条件变量Condition(31)

    对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – 线程条件变量Condition. 一.线程条件变 ...

  8. threading 官方 线程对象和锁对象以及条件对象condition

    官方地址:https://docs.python.org/2/library/threading.html#thread-objects 以下只截取condition部分,其他Lock()以及thre ...

  9. 线程高级篇-Lock锁和Condition条件

    浅谈Synchronized: synchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,执行代码块时,其 ...

随机推荐

  1. android 开发设计模式---观察者模式

    情景1 有一种短信服务,比如天气预报服务,一旦你订阅该服务,你只需按月付费,付完费后,每天一旦有天气信息更新,它就会及时向你发送最新的天气信息. 情景2 杂志的订阅,你只需向邮局订阅杂志,缴纳一定的费 ...

  2. XGBoost 与 Boosted Tree

    http://www.52cs.org/?p=429 作者:陈天奇,毕业于上海交通大学ACM班,现就读于华盛顿大学,从事大规模机器学习研究. 注解:truth4sex  编者按:本文是对开源xgboo ...

  3. pandas的基本功能(一)

    第16天pandas的基本功能(一) 灵活的二进制操作 体现在2个方面 支持一维和二维之间的广播 支持缺失值数据处理 四则运算支持广播 +add - sub *mul /div divmod()分区和 ...

  4. 码云和git

    第一步: 码云上注册: 第二部: 创建项目;根据需求,哒哒哒全部填完 第三部: 设置公钥(重点来了,头晕) 1. 打开git终端 git Bash 2.进入.ssh目录 输入命令 cd ~/.ssh ...

  5. 系统开机时提示BOOTMGR is compressed

    问题描述: 开机时提示 BOOTMGR  is compressed Press Ctrl+Alt+Del to restart 操作方法: 1.插入带有U盘启动的U盘2.进入winpe系统后,打开“ ...

  6. Vue 组件&组件之间的通信 之 子组件向父组件传值

    子组件向父组件传值:子组件通过$.emit()方法以事件形式向父组件发送消息传值: 使用步骤: 定义组件:现有自定义组件com-a.com-b,com-a是com-b的父组件: 准备获取数据:父组件c ...

  7. ORA-08176 错误的一个案例

    在演示事务的read only mode 的时候,因为一个错误有了这个意外的收获.场景是这样的: 在session 1 中执行了如下的语句. SQL> set transaction read ...

  8. C# 开发AliYun(阿里云) 小蜜调用接口代码

    using System; using System.Collections.Generic; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Excepti ...

  9. MYSQL数据库常用操作命令

    1.连接MYSQL: mysql -h 主机地址 -u 用户名 -p 2.修改密码: 安装后第一次登录使用: mysqladmin (因为没有初始密码) 修改原密码: mysqladmin -u ro ...

  10. 數據監控与診斷--環形緩沖區(RING BUFFER)

    1.  環形緩沖區 動態管理視圖: sys.dm_os_ring_buffers 查看ring_buffers: Select distinct ring_buffer_type from sys.d ...