1. python的threading模块的Condition类提供了通过条件变量保持多个线程间同步.
一个线程阻塞,等待从其他线程获取通知。

2. 假设有两个线程A和B,线程A首先执行wait(),线程B再执行notify()。
线程A从Condition对象上得到通知,wait()函数获取到锁,往下继续执行。

3. 此时线程B再次执行notify(),但此时线程A正在运行wait()之后的代码,没有执行wait()。
线程B执行的notify(),会是怎样的结果?

根据查看代码和文档,猜测可能会有以下结果:

线程B报错,没有waiter(这是从源码中看到的)。

如何解决?

1. 线程A的wait()后面的代码应尽快执行完毕,让线程A尽快在下个循环中进入wait()等待。

2. 根据实际业务需求,线程B应尽量避免没有线程在wait()的时候,执行notify()。

这么看来,还是后面这个方法靠谱一些。

Condition类的notify()只管通知,至于有没有线程在wait(),它就不管了(最多只报错).

转载于:https://www.cnblogs.com/huazi/archive/2013/05/08/3067262.html

线程同步思考 - Condition模块相关推荐

  1. python线程同步condition_042孤荷凌寒自学python线程同步之Condition对象

    孤荷凌寒自学python第四十二天python 的线程同步之Condition对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天学习了Condition对象,发现它综合了Event对象 ...

  2. 线程同步:Condition

    使用Synchronized关键字(synchronized方法或者synchronized代码块)来保证线程间同步,则系统中存在同步监视器(显式或者隐式),可以使用wait().notify().n ...

  3. Python线程同步机制: Locks, RLocks, Semaphores, Condition

    为什么80%的码农都做不了架构师?>>>    翻译自Laurent Luce的博客 原文名称:Python threads synchronization: Locks, RLoc ...

  4. python 测试 多线程 _thread和threading模块 线程同步,线程优先级队列

    文章目录 python 多线程简介 Python中使用线程的两种方式 1.函数式 示例 2.线程模块 示例 线程同步 示例 线程优先级队列( Queue)[暂时没用到,没仔细看] 示例 其他 thre ...

  5. (删)Java线程同步实现二:Lock锁和Condition

    在上篇文章(3.Java多线程总结系列:Java的线程同步实现)中,我们介绍了用synchronized关键字实现线程同步.但在Java中还有一种方式可以实现线程同步,那就是Lock锁. 一.同步锁 ...

  6. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步

    主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...

  7. python 线程同步_Python并发编程-线程同步(线程安全)

    Python并发编程-线程同步(线程安全) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 线程同步,线程间协调,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直 ...

  8. 多线程怎么保证数据安全_Python threading实现多线程 提高篇 线程同步,以及各种锁...

    本文主要讲多线程的线程之间的资源共享怎么保持同步. 多线程基础篇见,木头人:Python threading实现多线程 基础篇 Python的多线程,只有用于I/O密集型程序时效率才会有明显的提高,如 ...

  9. Python线程同步机制

    同步访问共享资源 在使用线程的时候,一个很重要的问题是要避免多个线程对同一变量或其它资源的访问冲突.一旦你稍不留神,重叠访问.在多个线程中修改(共享资源)等这些操作会导致各种各样的问题:更严重的是,这 ...

最新文章

  1. 怎么看python环境变量配置是否好了验证图片_python 的 tesserocr 模块安装与获取图片验证码...
  2. ajax php 观察者模式,JavaScript观察者模式定义和dom事件实例详解
  3. java学习(101):arraylist的遍历和增加
  4. java实现简单的约瑟夫环问题
  5. 网站整体流程_企业建设网站流程解析-上海回声网络
  6. Java 集合HashSet TreeSet HashMap ArrayList TreeList
  7. [sed] linux sed 批量替换字符串-转
  8. datagridview合并表头
  9. C++ Primer Plus 第二章编程练习
  10. DNN2(DotNetNuke2.0)的一些资源
  11. ms sql server 2005 select guid返回null的问题
  12. 计算机应用第四单元,计算机应用基础基础模块教案 第四单元 Word 2010文字处理软件.docx...
  13. safari显示找不到服务器,苹果自带浏览器找不到服务器是什么问题
  14. web常见漏洞修复方法
  15. 九爷带你部署Mfs分布式文件系统
  16. springboot新手项目从零开始搭建,涉及excel数据导出和邮箱发送(上)
  17. STM32 USB基础知识
  18. Activity到底是什么(新手学Android)
  19. Kubernetes(K8s)优势究竟是什么?
  20. html只选择年份,原生jQuery实现只显示年份下拉框

热门文章

  1. EMC NetWorker备份oracle安装配置指南
  2. 高温预警c语言,注意 | 高温预警来了!最高38°C!高温7连击!
  3. 基于 FPGA 的并行全比较排序算法,topK
  4. FPGA 内部双口块RAM 读写实现
  5. 云上人最终产品简易代码
  6. ES6 模块加载export 、import、export default 、import() 语法与区别,笔记总结
  7. SQLite剖析之临时文件、内存数据库
  8. Python基础,Hello,world
  9. Android系统Google Maps开发实例浅析
  10. ImportError: No module named pil