前言丨

关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景:

吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸。
为了避免这种情况,在下鱼丸的过程中,先锁定操作,让吃火锅的小伙伴停一会,等鱼丸熟了再开吃,那么python如何模拟这种场景呢?

首先需要明确几个概念:

概念

  • 多个线程几乎在同时修改某一共享数据时,需要进行同步控制
  • 线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制就是引入互斥锁
  • 互斥锁保证每次只有一个线程能够进程写操作,从而保证数据的准确性
  • threading模块定义了lock类来进行锁操作

lock类

  • Lock():创建锁
  • acquire([blocking]): 进入同步状态,如果blocking为True,则当前线程会阻塞,直到获取锁,False则不会阻塞。默认为True。
  • release():释放锁

未锁定

1、如果多个线程同时操作某个数据,会出现不可预料的结果。

比如以下场景:当小伙伴a在往火锅里面添加鱼丸的时候,小伙伴b在同时吃掉鱼丸,这很有可能导致刚下锅的鱼丸被夹出来了(没有熟),或者还没下锅,就去夹鱼丸(夹不到)。

2.运行结果:

线程同步(锁lock)

1.为了避免以上这种情况发生,就引入锁的概念,锁有两种状态:锁定和未锁定

2.每当一个线程a要访问共享数据时,必须先获得锁定;如果已经有别的线程b获得锁定了,那么就让线程a暂停,也就是同步阻塞;等到线程b访问完毕,释放锁以后,再让线程a继续。

3.用threading.Lock()这个类里面的两个方法

  • acquire() 锁住
  • release() 释放锁

4.运行结果:


以上是python笔记7全部内容,如果觉得对你有帮助,就点击“收藏”吧!

如果还有疑问的地方,欢迎评论留言给我们~

开线程插数据_python笔记7-多线程之线程同步(锁lock)相关推荐

  1. java基础巩固笔记(5)-多线程之线程并发库

    2019独角兽企业重金招聘Python工程师标准>>> java基础巩固笔记(5)-多线程之线程并发库 标签: java [TOC] 本文主要概述java.util.concurre ...

  2. python 线程等待_详解python多线程之间的同步(一)

    引言: 线程之间经常需要协同工作,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直到该线程完成对数据的操作.这些技术包括临界区(Critical Section),互斥量(Mute ...

  3. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  4. python线程池并发_python 并发编程多线程之进程池/线程池

    一.验证GIL锁的存在 Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可以"运行"多个线程,但在任意时刻只有一个线程在解释器中运行 ...

  5. 【Java笔记】多线程与线程同步

    文章目录 一. 多线程 1.并发与并行 2.进程与线程 3. 线程的创建 3.1 继承Thread类 3.2 实现Runnable接口 3.3实现callable接口 二. 线程安全 1.案例 2.线 ...

  6. python 线程 的类库_python类库32[多线程同步Lock+RLock+Semaphore+Event]

    多线程基础:python类库32[多线程同步] 一 多线程同步 由于CPython的python解释器在单线程模式下执行,所以导致python的多线程在很多的时候并不能很好地发挥多核cpu的资源.大部 ...

  7. 主线程是如何向子线程传递数据的?_c++ 利用thread创建线程

    用进行多线程开发 小时候,老师总是教育我们上课要专心,"一心不可二用".可是CPU这个不听话的"熊孩子"偏偏却在一个芯片中加入了两个甚至多个运算核心,想要一&q ...

  8. java 线程池 状态_【Java多线程】线程状态、线程池状态

    线程状态: 线程共包括以下5种状态. 1. 新建状态(New)线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪状态(Runnable)也 ...

  9. 多线程资源共享之同步锁

    本篇为大家讲解解决多线程线程安全问题的另一种思路,同步锁:synchronized和ReentrantLock.二者都是锁机制实现线程安全,但ReentrantLock的使用更加灵活,更有读写分离锁, ...

最新文章

  1. 20个开源项目助你快速掌握区块链应用开发,JS Go PHP Python Ruby
  2. 浅析 Linux 初始化 init 系统
  3. 渗透测试learning日记(1)
  4. mac命令行用sublime,vscode,atom打开目录或文件的方法
  5. 江夏学院计算机,福建江夏学院计算机作业.doc
  6. 【C++】 C++标准模板库(四) Set
  7. 数字后端——可制造性设计
  8. Java命令行界面(第7部分):JCommander
  9. Exchange Server 2016 独立部署/共存部署 (七)—— DAG功能测试
  10. CCF201512-1 数位之和(100分)【进制+文本】
  11. Mongodb 设置过期时间Expire Date
  12. 2018——走过的路
  13. 【云计算的1024种玩法】使用阿里云+微擎打造微信公众号管理系统
  14. HBuilder开发App教程
  15. 数十万互联网从业者的共同关注!
  16. 马云5年实现“无现金社会”,必须迈过这几道坎?
  17. 女生戴蓝牙耳机什么颜色好看?适合女生的高颜值蓝牙耳机
  18. USRP B210 Ubuntu基本测试
  19. PCA(Principal Component Analysis)主成分分析数学原理
  20. c语言按位取反 补码,求C语言 按位取反?

热门文章

  1. ASP.NET Core MVC – Form Tag Helpers
  2. Xamarin的Kimono以及Google的Guetzli和Draco
  3. IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡
  4. 【ArcGIS Pro微课1000例】0003:ArcGIS pro 2.5加载OSGB点云模型案例教程
  5. C#生成二维码(含解码)
  6. 「博客之星」评选,互投5星,留链必投
  7. Java之volatile如何保证可见性和指令重排序
  8. Android之项目中如何用好构建神器Gradle?
  9. 对象比较 ===三个等于号
  10. linux cpu核数查看_Linux日常必备的 8 个小技能