前言丨
关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景:
吃火锅的时候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全部内容,如果觉得对你有帮助,就点击“收藏”吧!
如果还有疑问的地方,欢迎评论留言给我们~